
یکی از فرمتهای نگهداری داده در سیستمهای کامپیوتری CSV است. در این آموزش ۲ روش کار با CSV در پایتون را یاد میگیریم تا بتوانیم محتوای csv را با پایتون خوانده یا یک فایل جدید با دیتاهای خودمان ایجاد کنیم.
CSV یک فرمت استاندارد برای قالببندی محتوای متنی است. معمولاً دادههای ساختاریافته و جدولی را میتوان به شکل بسیار سادهای در این فرمت قرار داد. هر خط از فایل، یکی از رکوردهای اطلاعاتی ماست و دادهها در هر خط با علامت یکسانی جدا شدهاند.
طبق این استاندارد، علامت جداکننده CSV کاما (,
) است. اما ممکن است نیاز باشد با فایلهایی که از کاراکتر دیگری استفاده کردهاند نیز کار کنید. اگر میخواهید با excel کار کنید (فرمت xlsx، آموزش اکسل در پایتون را ببینید.)
برای کار با CSV در پایتون روشهای مختلفی وجود دارد. در این آموزش ۲ روش را بررسی میکنیم. روش اول استفاده از کتابخانه CSV است. با کمک این ماژول میتوانیم یک فایل را خوانده یا CSV جدید ایجاد کنیم.
روش دوم استفاده از کتابخانه pandas است. اگر میخواهید روی دادهها پردازشهای آماری کنید یا از آنها برای یادگیری ماشین و داده کاوی استفاده کنید، این روش برای شماست!
فهرست محتوای آموزش
کار با ماژول CSV در پایتون
اگر نصب پایتون را به روش عادی انجام داده باشید، این ماژول در کتابخانههای پیشفرض وجود دارد و نیازی به نصب آن نیست.
ابتدا میبایست این کتابخانه را به برنامه خود اضافه کنیم. پس قبل از نوشتن هر کد دیگری، با import آن را اضافه میکنم.
import csv
در این آموزش فایل CSV به نام employee.csv
دارم. در آن چند سطر داده قرار دادم تا از آنها استفاده کنیم.

باز کردن csv با پایتون
در ابتدا باید فایل csv خود را باز کنیم. برای این کار از تابع open()
استفاده میکنم. آدرس و اسم فایل را به صورت رشته در آرگومان اول قرار میدهیم.
file = open("employee.csv")
این تابع پارامترهای دیگری نیز میگیرد. مثلاً در پارامتر دوم میتوانیم حالت (mode) باز کردن فایل را مشخص کنیم. اگر حالت خاصی را تعیین نکنیم، فایل را برای خواندن (مد r) باز میکند. یعنی دستور زیر با دستور بالا یکسان خواهد بود:
file = open("employee.csv", "r")
اگر مایلید پارامترهای این تابع و روند خواندن و نوشتن فایل را یاد بگیرید، آموزش کار با فایل در پایتون را ببینید.
حالا با متد reader()
در csv فایل باز شده را میخوانیم. همان شئ فایل را به عنوان ورودی این تابع قرار میدهیم.
data = csv.reader(file)
این تابع به طور پیشفرض، جداکننده را کاراکتر کاما (,
) در نظر میگیرد. اگر در فایل شما از علامت دیگری استفاده شده، میتوانید آن را در آرگومان delimiter تعریف کنید. خط زیر با دستور بالا هیچ تفاوتی ندارد:
data = csv.reader(file, delimiter=",")
اگر نوع data را بررسی کنیم، میبینیم که یک شئ از کلاس _csv.reader
است. (کلاس در پایتون) این شئ یک تکرارگر یا iterable پایتون است که میتوانیم از آن در حلقهها استفاده کنیم.

توجه کنید که مشابه کار با فایلها، پس از باز کردن csv با کد پایتون بالا، فقط یک بار میتوانیم از ابتدا تا انتهای آن حرکت کنیم.
خواندن فایل CSV
سطر اول فایلی که اینجا داریم عنوان دادههاست. پس باید خط اول را خوانده و در صورت نیاز در جایی نگه داریم. برای این کار از تابع next()
استفاده میکنم. این تابع یک سطر از دادههای ما را خوانده و به صورت لیست به ما میدهد.
در قطعه کد زیر نحوه استفاده و خروجی آن را میبینید:
header = next(data)
# ['id', 'name', 'family', 'department', 'hireDate']
برای خواندن بقیه دادهها از حلقه for پایتون استفاده میکنم. در قطعه کد زیر، اعضای فرضی سازمان را در خروجی چاپ میکنم.
for employee in data:
print(f"{employee[1]} {employee[2]} work in {employee[3]} department")
به عنوان جمعبندی این بخش، برای خواندن فایل CSV در پایتون کدی شبیه به زیر داریم. در اینجا، پس از خواند فایل، اطلاعات آن را در لیست all_employee قرار دادهام.
import csv
file = open('employee.csv')
data = csv.reader(file)
header = next(data)
all_employee = []
for employee in data:
all_employee.append(employee)
file.close()
در انتهای کار با فایل بهتر است آن را ببندیم. به همین دلیل از file.close()
استفاده کردهام.
تبدیل CSV به دیکشنری
وقتی دادههای موجود در فایل را چاپ میکردیم، دیدید که از اندیس برای دسترسی به دادههای هر سطر استفاده کردم. این کار برای برنامههای بزرگ و در حال توسعه ممکن است کمی سخت باشد. مخصوصاً اگر ساختار فایلهای csv که در پایتون فراخوانی میشوند تغییر کند!
برای اینکه به صورت کلید-مقدار به مقادیر csv دسترسی داشته باشیم، میتوانیم کل فایل را به دیکشنری تبدیل کنیم. (دیکشنری در پایتون)
برای تبدیل csv به دیکشنری در پایتون از تابع DictReader()
استفاده میکنیم. این تابع به طور پیشفرض، مقادیر سطر اول را عنوان ستونها در نظر میگیرد. حالا هر آیتم در این شئ، یک دیکشنری است که کلیدهایی متناسب با ستونها دارد.
import csv
file = open('employee.csv')
data = csv.DictReader(file)
for employee in data:
print(f"{employee['name']} {employee['family']} work in {employee['department']} department")
file.close()
ایجاد و نوشتن CSV با پایتون
برای نوشتن CSV نیز از همین کتابخانه استفاده میکنیم. در ابتدا باید فایل را برای نوشتن باز کنیم. اگر چنین فایلی وجود نداشته باشد، پایتون آن را ایجاد خواهد کرد. بنابراین نیازی به ایجاد فایل به طور جداگانه نیست.
به دلیل اینکه از تابعی برای نوشتن سطرهای csv استفاده میکنیم که خودش کاراکتر خط بعدی را قرار میدهد، موقع باز کردن فایل باید مشخص کنیم که کاراکتر خط بعدی خالی باشد. در غیر اینصورت سطرها یک در میان خالی خواهند شد.
از تابع writer()
برای ایجاد شئ نویسنده در فایل استفاده میکنیم. برای نوشتن دادهها ۲ تابع داریم:
writerow()
یک لیست گرفته و اعضای آن را به عنوان دادههای یک سطر وارد میکند.writerows()
یک لیست گرفته و هر عضو لیست را به عنوان یک سطر مینویسد. (معمولاً یک لیست دوبعدی یا تودرتو داریم)
در قطعه کد زیر، از اولی برای نوشتن نام ستونها و از دومی برای ثبت دادهها استفاده میکنم:
import csv
file = open("new.csv", "w", newline="")
writer = csv.writer(file)
data = [['sara', 22, 4.9],
['omid', 24, 3.7],
['nima', 25, 3.9],
['ghazal', 21, 2.9]]
writer.writerow( ['name', 'age', 'salary'] )
writer.writerows( data )
file.close()
مرور روش کار با csv
در این آموزش یاد گرفتیم چطور با فایلهای CSV در پایتون کار کنیم. قطعاً کتابخانههای دیگری نیز برای این کار وجود دارد که بنا به نیاز یا محدودیتهایی که داریم میتوانیم از آنها استفاده کنیم. البته در کتابخانه csv نیز تابعهای بیشتری وجود دارد. اگر مایلید بیشتر با آن آشنا شوید، به مستندات انگلیسی آن مراجعه کنید.
با تابع reader()
یک شئ reader از فایل ایجاد کردیم تا بتوانیم به دادههای آن دسترسی داشته باشیم. همچنین میتوانستیم جداکننده را با آرگومان delimiter تعیین کنیم. در بخش دوم با writer()
یک شئ writer ایجاد کردیم تا بتوانیم دادههایمان را با پایتون در csv بنویسیم.
از آنجا که csv یک فایل متنی ساده است، میتوانیم آن را بدون استفاده از این کتابخانهها و فقط با خواند محتوای آن پردازش کنیم. در این حالت باید از توابع پردازش و جداکننده رشته متنی در پایتون استفاده کنیم.
اگر این دادهها را برای کارهای data mining نیاز دارید و میخواهید از pandas استفاده کنید، میتوانید از متد read_csv()
در این کتابخانه استفاده کنید. این تابع آدرس و اسم فایل را در ورودی گرفته و به ما یک data frame میدهد. در نتیجه میتوان از دادهها به راحتی استفاده کرد.
امیدوارم با این آموزش بتوانید با فایلهای CSV در پایتون کار کنید. اگر تجربه یا سؤالی در این مورد دارید، از بخش دیدگاهها مطرح کنید.
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
سلام من یه فایل csv نوشتم اما وقتی دستور open رو میزنم فایل رو پیدا نمیکنه و دائم ارور میده که محل فایل پیدا نشد. چکاری میتونم انجام بدم؟ ممنون میشم راهنماییم کنید
سلام
احتمالاً آدرس فایل رو اشتباه تعریف میکنید. دقت کنید که یا باید آدرسدهی نسبی (از کنار فایل مثل
file.csv
) انجام بدید یا مطلق (از درایو شروع کنید تا اسم فایل؛ مثلD:\\directory\...
)باسلام و احترام
مطالب بسیار عالی و شیوا توضیح داده شده در عین بیان ساده کاملا رسا بود و مطالب قابل درک و فهم بود. از شما بسیار ممنون و سپاسگزارم
سلام
خوشحالم که براتون مفیده بوده. ممنون برای انرژی خوبی که بهمون میدید. 🙂
سلام خیلی ممنون از مطالب مفیدتون .
ی لیست دارم که تعدادی ردیف داره میخوام این لیستم رو به اکسل تبدیل کنم ،ولی به مشکل میخورم .
اگرامکانش هست مراحل تبدیل لیست به فایل اکسل رو ی مختصر توضیح بدین .منتظر پاسختون هستم .ممنون از محبتتون
سلام
در حالت کلی بهتره با یک حلقه روی لیست حرکت کنید و در هر بار دادههایی که لازمه رو ذخیره کنید. این آموزش برای csv هست، اگه میخواید توی اکسل باشه آموزش کار با اکسل در پایتون رو ببینید.
سلام
من یه پروژه دارم که گفته باید اعداد و استرینگ رو به ترتیب صعودی در فایل csv ذخیره کنم
میشه کمکم کنید؟
سلام
میتونید مقادیر رو درون یک لیست قرار بدید و با استفاده از توابع و متدهای مرتبسازی لیست (مثل
sorted()
) اونها رو مرتب کنید. در نهایت با ماژول csv پایتون اونها رو در خروجی ذخیره کنید.سلام
یه پروژه دارم که میگه فای تکست رو باز کن و فقط خط های مشخص شده رو بریز داخل یه فایل csv دیگه ولی نمیدونم چجوری؟
سلام
راهحلهای مختلفی دارید. یکیش اینه که شما فایل رو با
open()
باز کنید و تمام خطوطش رو بخونید. بعدش توی یه حلقه هر خطی که لازم بود رو داخل csv بنویسید.سلام یه سوال داشتم. اگه بخوایم فرضا فقط سطر سوم یا دوم فایل csv رو به صورت لیست به یه پارامتر بدیم باید چیکار کنیم؟
سلام
وقتی عملیات خوندن csv انجام میشه، ما یه collection از دیتاها داریم. یا میتونید با حلقه روی اونها حرکت کنید یا با تابع
list()
شیء data رو به نوع دادهای لیست تبدیل کنید.حالا با دسترسی به اندیس مورد نظر (مثلاً 2 برای خط سوم) میتونید به سطرها دسترسی داشته باشید.
با سلام. تازه با سایت شما آشنا شدم و برام بسیار جالب بود که اینهمه محتوای کامل و رایگان گذاشتید. ممنون از شما. فقط میخواستم بدونم که آیا جایی هست که بشه سوالات و اشکالات برنامه نویسی رو بین کاربران ایرانی مطرح کرد؟ پیشاپیش ممنون از توجه شما
سلام
خیلی خوشحالم که آموزشها رو خوب و کامل میدونین. 🙂
این محیط توی وب فارسی رو اصطلاحاً «انجمنهای گفتگو برنامه نویسی» میگم. ولی یه سایت مرجع و خوب که بخوام معرفی کنم توی ایران وجود نداره!!
باید یکم توی نتایج جستجو بگردید ببینید کاربرهای کدوم یکی فعالترن!
اگه در برنامهنویسی فعالید، پیشنهاد میکنم توی stackoverflow یا امثال اون هم فعال باشید. شاید انگلیسی بودنش سخت باشه ولی با ترجمههای نصفه نیمه کمکم زبانتون رو هم قوی میکنه!
راستی، از اواخر ماه (حدود ۱۰ روز دیگه) بخش آموزشهای ویدئویی که مکمل دورههای فعلیمون هستن هم راهاندازی میشه. اگه دوست داشتید بهمون سر بزنید یا توی اینستاگراممون پیگیرش باشید.
ممنونم از پاسخگوییتون. امیدوارم در مسیر عالیتون، موفق باشید