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

خواندن ستون‌های CSV با DictReader پایتون

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

✍️ کار با شماره ستون‌ها زود شکننده می‌شود: اگر product همیشه خانه صفر باشد، باید این قرار را همه جای کد حفظ کنیم. DictReader سطر اول را نام ستون‌ها در نظر می‌گیرد و هر رکورد را دیکشنری می‌کند. به این ترتیب به جای حفظ شماره ستون، row['product'] را می‌خوانیم.

مثلاً برای عنوان name,city و ردیف «سارا,شیراز»، یک دیکشنری با کلیدهای name و city داریم. ردیف عنوان در خروجی داده‌ها تکرار نمی‌شود. اگر فقط عنوان وجود داشته باشد، فهرست رکوردها خالی است. در این فعالیت همه ردیف‌ها تعداد ستون درست دارند و هنوز هیچ تبدیل عددی یا حذف فاصله انجام نمی‌دهیم.

کد اولیه نمونه CSV را داخل فایل موقت می‌نویسد. قسمت خواندن را با csv.DictReader کامل کن و رکوردها را به فهرست تبدیل کن تا بعد از بسته شدن فایل قابل استفاده باشند. خطای رایج، برگرداندن خود reader است؛ آن یک شیء پیمایشگر وابسته به فایل است و جواب JSON این تمرین نیست. همچنین نام ستون‌ها را به‌دلخواه فارسی یا کوتاه نکن؛ کلیدها باید دقیقاً همان عنوان‌های ورودی بمانند. فایل خالی هم هیچ رکوردی ندارد.

فعالیت شما

تابع csv_records(text) متن CSV معتبر با header یکتا و تعداد سلول درست را در فایل موقت UTF-8 بسازد و با DictReader بخواند؛ فهرست دیکشنری‌های رشته‌ای را برگرداند. header رکورد داده نیست؛ فقط header یا متن خالی خروجی [] دارد. هیچ strip یا تبدیل نوع انجام نده. برای 'product,quantity\nدفتر,2\n' خروجی [{'product':'دفتر','quantity':'2'}] است.

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

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

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

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

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

import tempfile
from pathlib import Path
import csv

def csv_records(text):
    with tempfile.TemporaryDirectory() as folder:
        path = Path(folder) / 'rows.csv'
        path.write_text(text, encoding='utf-8')
        with open(path, encoding='utf-8', newline='') as file:
            # TODO: return materialized dictionaries
            return []