حالت آفلاین — محتوا از حافظهٔ کش نمایش داده می‌شود
آموزش کار با فایل در پایتون؛ CSV، JSON و گزارش‌گیری

رفع باگ کامای نقل‌قول‌دار در CSV پایتون

خواندن CSV با پایتون؛ ستون‌ها، نقل‌قول و عددهای متنی · 0٪

✍️ اگر نام محصول «دفتر, سبز» باشد، کامای آن نباید یک ستون تازه بسازد. CSV با قرار دادن سلول در نقل‌قول این تفاوت را مشخص می‌کند. تقسیم دستی هر خط روی کاما نه نقل‌قول را درست برمی‌دارد و نه مرز واقعی سلول‌ها را می‌شناسد؛ گاهی فقط روی داده ساده بی‌اشکال به نظر می‌رسد.

برای مثال، متن "کیف, بزرگ",1 دو سلول دارد: نام کامل محصول و تعداد یک. کد دستی آن را سه تکه می‌کند و مقدار نصفه با نقل‌قول باقی می‌گذارد. این تمرین فقط فهرست سلول‌ها را می‌خواهد؛ خط عنوان ندارد تا خطای parser را جدا از موضوع header بررسی کنیم.

قسمت خواندن کد اولیه را با csv.reader جایگزین کن. برای فایل خالی فهرست خالی برگردد و خط کاملاً خالی هم رکوردی تولید نکند. سلول خالی در ردیفی مثل ,2 باید حفظ شود؛ خالی بودن یک سلول با خالی بودن کل خط فرق دارد. خطای رایج، حذف دستی همه علامت‌های نقل‌قول از متن است؛ آن کار هنوز نمی‌فهمد کدام کاما جداکننده بوده. اجازه بده parser استاندارد قواعد قالب را اعمال کند.

فعالیت شما

تابع quoted_rows(text) متن CSV بدون header و با قالب معتبر را در فایل موقت بسازد و با csv.reader به فهرست ردیف‌ها، هرکدام فهرست رشته‌ها، تبدیل کند. خط کاملاً خالی را نادیده بگیر ولی سلول خالی را نگه دار. کامای داخل نقل‌قول جزو همان سلول است؛ quoted_rows('"کیف, بزرگ",1\n')=[['کیف, بزرگ','1']]. متن خالی [] است.

مطالعهٔ این گام برای همه آزاد است

برای پاسخ‌دادن، بررسی پاسخ، ثبت پیشرفت و استفاده از دستیار باید شرایط شرکت در فعالیت‌ها را داشته باشید.

برای انجام فعالیت وارد شوید

برای انجام فعالیت‌ها ابتدا این دوره‌های پیش‌نیاز را تکمیل کنید:

کد اولیهٔ فعالیت

import tempfile
from pathlib import Path

def quoted_rows(text):
    with tempfile.TemporaryDirectory() as folder:
        path = Path(folder) / 'quoted.csv'
        path.write_text(text, encoding='utf-8')
        return [line.split(',') for line in path.read_text(encoding='utf-8').splitlines() if line]