✍️ قالب CSV اطلاعات نوع پایتونی ذخیره نمیکند. reader متن هر سلول را به همان شکل رشته برمیگرداند؛ اگر بخواهیم تعداد را در قیمت ضرب کنیم، تبدیل عدد را باید آگاهانه انجام بدهیم. حتی اگر ظاهر یک سلول فقط رقم باشد، خروجی اولیه parser هنوز رشته است.
مثلاً ردیف مداد,4,25 به سه رشته تبدیل میشود، نه یک رشته و دو عدد. حالا خروجی این نمونه را انتخاب کن:
import csv
import io
text = 'product,quantity\nدفتر,2\n'
rows = list(csv.reader(io.StringIO(text)))
print(rows[1])
خانه صفر rows خود سطر عنوان است، چون csv.reader بهصورت خودکار معنی header را تشخیص نمیدهد. خانه یک اولین رکورد داده است. بعداً DictReader از عنوانها کلید میسازد، ولی حتی آن هم بهطور خودکار رشته را به عدد تبدیل نمیکند.
خطای رایج، جابهجا گرفتن شماره ردیف و شماره ستون یا فراموش کردن اینکه عنوان هم داخل خروجی reader حضور دارد. برای پاسخ، اول دو ردیف خروجی را جدا بنویس، سپس فقط ردیف یک را بردار. به وجود کوتیشن دور مقدار دو در نمایش فهرست توجه کن؛ همین نشانه نوع رشته را از عدد جدا میکند.
فعالیت شما
خروجی rows[1] را انتخاب کن؛ reader سطر عنوان را هم به عنوان اولین ردیف میخواند و تمام سلولها رشته هستند.