✍️ اگر نام محصول «دفتر, سبز» باشد، کامای آن نباید یک ستون تازه بسازد. CSV با قرار دادن سلول در نقلقول این تفاوت را مشخص میکند. تقسیم دستی هر خط روی کاما نه نقلقول را درست برمیدارد و نه مرز واقعی سلولها را میشناسد؛ گاهی فقط روی داده ساده بیاشکال به نظر میرسد.
برای مثال، متن "کیف, بزرگ",1 دو سلول دارد: نام کامل محصول و تعداد یک. کد دستی آن را سه تکه میکند و مقدار نصفه با نقلقول باقی میگذارد. این تمرین فقط فهرست سلولها را میخواهد؛ خط عنوان ندارد تا خطای parser را جدا از موضوع header بررسی کنیم.
قسمت خواندن کد اولیه را با csv.reader جایگزین کن. برای فایل خالی فهرست خالی برگردد و خط کاملاً خالی هم رکوردی تولید نکند. سلول خالی در ردیفی مثل ,2 باید حفظ شود؛ خالی بودن یک سلول با خالی بودن کل خط فرق دارد. خطای رایج، حذف دستی همه علامتهای نقلقول از متن است؛ آن کار هنوز نمیفهمد کدام کاما جداکننده بوده. اجازه بده parser استاندارد قواعد قالب را اعمال کند.
فعالیت شما
تابع quoted_rows(text) متن CSV بدون header و با قالب معتبر را در فایل موقت بسازد و با csv.reader به فهرست ردیفها، هرکدام فهرست رشتهها، تبدیل کند. خط کاملاً خالی را نادیده بگیر ولی سلول خالی را نگه دار. کامای داخل نقلقول جزو همان سلول است؛ quoted_rows('"کیف, بزرگ",1\n')=[['کیف, بزرگ','1']]. متن خالی [] است.