از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
روش تبدیل لیست به رشته CSV در پایتون
سرفصلهای مطلب
معرفی
در زمینه های مبتنی بر داده مانند تجزیه و تحلیل داده ها، یادگیری ماشین و توسعه وب، شما اغلب نیاز دارید که داده ها را از یک قالب به فرمت دیگر تبدیل کنید تا متناسب با نیازهای خاص باشد. یک نیاز رایج تبدیل یک لیست پایتون به یک رشته CSV است که امکان اشتراک گذاری و ذخیره سازی داده ها را در یک قالب پذیرفته شده جهانی و بسیار قابل حمل فراهم می کند.
در این مقاله قصد داریم به این موضوع بپردازیم process. در پایان آن، شما درک درستی از روش تبدیل لیست های پایتون به رشته های CSV با استفاده از پایتون خواهید داشت.
csv
مدول. ما فهرستهای ساده و همچنین فهرستهای پیچیدهتر از فرهنگ لغتها را بررسی میکنیم و گزینهها و پارامترهای مختلفی را مورد بحث قرار میدهیم که میتوانند به شما در انجام پیچیدهترین وظایف تبدیل کمک کنند.
آشنایی با لیست های پایتون و فایل های CSV
قبل از اینکه وارد تبدیل شویم process، درک دو بازیکن کلیدی درگیر ضروری است: لیست های پایتون و فایل های CSV.
لیست های پایتون
احتمالاً این را قبلاً می دانید، اما الف فهرست در پایتون یک نوع داده داخلی است که می تواند موارد ناهمگن را در خود جای دهد. به عبارت دیگر، می تواند انواع مختلفی از داده ها (مانند اعداد صحیح، رشته ها و حتی لیست های دیگر) را در یک دنباله مرتب ذخیره کند.
برای ایجاد یک لیست در پایتون، آیتم های خود را در پرانتز قرار می دهید ()
، هر مورد را با کاما از هم جدا کنید:
python_list = ("dog", 33, ("cat", "billy"))
میتوانید به موارد موجود در فهرست دسترسی داشته باشید، آنها را تغییر دهید و حذف کنید روی موقعیت آنها (شاخص) و لیست ها از عملیات های مختلفی مانند برش، الحاق و تکرار پشتیبانی می کنند.
فایل های CSV
CSV فایل های (مقادیر جدا شده با کاما) فایل های متنی ساده ای هستند که حاوی داده های جدولی هستند. هر خط در فایل نشان دهنده یک ردیف از جدول است، و هر مقدار (سلول) در ردیف با یک کاما از هم جدا شده است، از این رو نام:
name,age,city
John,27,New York
Jane,22,Los Angeles
در مثال بالا، خط اول اغلب به عنوان هدر نامیده می شود که نشان دهنده نام ستون ها است. خطوط بعدی ردیف داده ها هستند.
فایل های CSV به طور جهانی برای اهداف بی شماری استفاده می شوند. درک آنها ساده است، ایجاد آنها آسان است و می توانند توسط انواع مختلف نرم افزار از جمله برنامه های صفحه گسترده مانند Microsoft Excel و Google Sheets و البته زبان های برنامه نویسی مانند Python خوانده شوند.
ما اکنون آماده ایم تا وارد تبدیل واقعی شویم process با استفاده از پایتون csv
کتابخانه
پایتون csv کتابخانه
پایتون داخلی csv
ماژول یک مجموعه ابزار قدرتمند است که خواندن و نوشتن فایل های CSV را آسان می کند. این کارکردی را برای سریالسازی و سریالزدایی دادهها فراهم میکند و بین قالب دادههای CSV و ساختارهای داده درون حافظه پایتون ترجمه میکند.
قبل از اینکه بتوانیم از csv
کتابخانه، ما نیاز داریم import آن را به اسکریپت پایتون ما وارد کنید. این به سادگی استفاده از import
کلمه کلیدی:
import csv
با این خط در ابتدای اسکریپت ما، اکنون به آن دسترسی داریم csv
قابلیت های کتابخانه
این csv
کتابخانه چندین روش برای خواندن و نوشتن دادههای CSV ارائه میکند، اما برای هدف این مقاله، ما به چند مورد از آنها نیاز داریم:
csv.writer()
– یک شی نویسنده مسئول تبدیل داده های کاربر به رشته های محدود شده را برمی گرداند روی شیء فایل مانند داده شدهcsv.DictWriter()
– یک شی نویسنده را برمی گرداند که دیکشنری ها را روی ردیف های خروجی نگاشت می کند. اینfieldnames
پارامتر مجموعه ای از کلیدها است که ترتیب نوشتن مقادیر در فرهنگ لغت را در فایل CSV مشخص می کند.
حالا، ما می توانیم حرکت کنیم روی تا ببینیم چگونه می توانیم از آن برای تبدیل لیست پایتون به رشته CSV استفاده کنیم.
تبدیل لیست پایتون به رشته CSV
تبدیل لیست پایتون به رشته CSV بسیار ساده است csv
مدول. بیایید این را بشکنیم process پایین به مراحل
همانطور که قبلاً بحث شد، قبل از اینکه بتوانیم از آن استفاده کنیم csv
ماژول، ما نیاز داریم import آی تی:
import csv
سپس، باید یک لیست نمونه ایجاد کنیم:
python_list = ("dog", 33, ("cat", "billy"))
پس از ایجاد لیست و csv
ماژول وارد شده است، ما می توانیم لیست را به یک رشته CSV تبدیل کنید. اول از همه، ما یک را ایجاد می کنیم StringIO
آبجکت که یک شیء شبیه فایل در حافظه است:
import io
output = io.StringIO()
سپس یک را ایجاد می کنیم csv.writer
با این مخالفت کنید StringIO
هدف – شی:
writer = csv.writer(output)
این writerow()
روش از csv.writer
شی به ما امکان می دهد لیست را در مورد بنویسیم StringIO
شی به عنوان یک ردیف در یک فایل CSV:
writer.writerow(python_list)
در نهایت با فراخوانی رشته CSV را بازیابی می کنیم getvalue
روی را StringIO
هدف – شی:
csv_string = output.getvalue()
برای جمع بندی، کد ما باید چیزی شبیه به این باشد:
import csv
import io
python_list = ("dog", 33, ("cat", "billy"))
output = io.StringIO()
writer = csv.writer(output)
writer.writerow(python_list)
csv_string = output.getvalue()
print(csv_string)
این باید به ما یک نمایش CSV از آن بدهد python_list
:
dog,33,"('cat', 'billy')"
کار با فهرست دیکشنری ها
در حالی که فهرستها برای مدیریت مجموعههای سفارشدادهشده از آیتمها عالی هستند، شرایطی وجود دارد که برای مدیریت دادههایمان به ساختار پیچیدهتری نیاز داریم، مانند فهرستی از فرهنگهای لغت. این ساختار به ویژه هنگام برخورد با داده هایی که می توانند در قالب جدولی بهتر نمایش داده شوند، اهمیت پیدا می کند.
لیست دیکشنری ها در پایتون
در پایتون، دیکشنری یک است بدون سفارش مجموعه اقلام هر مورد به عنوان یک ذخیره می شود جفت کلید-مقدار. فهرست لغت نامه ها ساختارهای داده رایجی هستند که هر مورد در فهرست یک فرهنگ لغت است:
users = (
{"name": "John", "age": 27, "city": "New York"},
{"name": "Jane", "age": 22, "city": "Los Angeles"},
{"name": "Dave", "age": 31, "city": "Chicago"}
)
در این فهرست، هر فرهنگ لغت یک کاربر را نشان میدهد که نام، سن و شهر آنها به صورت جفت کلید-مقدار ذخیره میشود.
نوشتن فهرستی از دیکشنری ها در یک رشته CSV
برای نوشتن فهرستی از دیکشنری ها در یک رشته CSV، از عبارت استفاده می کنیم csv.DictWriter()
روشی که قبلا به اختصار به آن اشاره کردیم. ابتدا باید تعریف کنیم fieldnames
به عنوان لیستی از رشته ها، که کلیدهای فرهنگ لغت ما هستند:
fieldnames = ("name", "age", "city")
سپس یک را ایجاد می کنیم DictWriter
شی، عبور از آن StringIO
شی و fieldnames
:
output = io.StringIO()
writer = csv.DictWriter(output, fieldnames=fieldnames)
ما استفاده می کنیم writeheader
روش نوشتن fieldnames
به عنوان سربرگ رشته CSV:
writer.writeheader()
در نهایت، فهرست فرهنگ لغتها را مرور میکنیم و هر دیکشنری را بهعنوان یک ردیف در رشته CSV با استفاده از writerow
روش:
for user in users:
writer.writerow(user)
در نهایت کد ما باید به شکل زیر باشد:
import csv
import io
users = (
{"name": "John", "age": 27, "city": "New York"},
{"name": "Jane", "age": 22, "city": "Los Angeles"},
{"name": "Dave", "age": 31, "city": "Chicago"}
)
output = io.StringIO()
fieldnames = ("name", "age", "city")
writer = csv.DictWriter(output, fieldnames=fieldnames)
writer.writeheader()
for user in users:
writer.writerow(user)
csv_string = output.getvalue()
print(csv_string)
هنگامی که این اسکریپت را اجرا می کنید، خروجی زیر را مشاهده خواهید کرد:
name,age,city
John,27,New York
Jane,22,Los Angeles
Dave,31,Chicago
این نشان می دهد که فهرست فرهنگ لغت ما با موفقیت به یک رشته CSV تبدیل شده است. هر فرهنگ لغت در لیست به یک ردیف در رشته CSV تبدیل شده است، با کلیدها به عنوان سرصفحه ستون و مقادیر به عنوان داده در ردیف ها.
روش انتخاب جداکننده های مختلف
به طور پیش فرض، csv
ماژول از یک کاما به عنوان جداکننده بین مقادیر استفاده می کند. با این حال، در صورت نیاز می توانید از یک جداکننده متفاوت استفاده کنید. هنگام ایجاد a می توانید جداکننده را مشخص کنید csv.writer
یا csv.DictWriter
هدف – شی. فرض کنید می خواهیم از نقطه ویرگول به عنوان جداکننده استفاده کنیم:
import csv
import io
fruits = ('Apple', 'Banana', 'Cherry', 'Date', 'Elderberry')
output = io.StringIO()
writer = csv.writer(output, delimiter=';')
writer.writerow(fruits)
csv_string = output.getvalue()
print(csv_string)
این باید رشته CSV را با نقطه ویرگول به عنوان جداکننده به ما بدهد:
Apple;Banana;Cherry;Date;Elderberry
مدیریت نقل قول ها
احتمالا قبلاً متوجه شده اید، اما csv
ماژول رشته CSV را بدون هیچ نقل قولی برمی گرداند. از طرف دیگر، هر عنصر از لیست اصلی که شامل یک کاراکتر خاص مانند یک جداکننده، خط جدید یا کاراکتر نقل قول است، در واقع با علامت نقل قول احاطه می شود:
import csv
import io
fruits = ('Apple', 'Ban,ana', 'Cherry', 'Dat\ne', 'Elderberry')
output = io.StringIO()
writer = csv.writer(output)
writer.writerow(fruits)
csv_string = output.getvalue()
print(csv_string)
در راستای آنچه قبلاً گفتیم، این فقط عناصری از آن را نقل می کند fruit
لیستی که شامل کاراکترهای خاص است:
Apple,"Ban,ana",Cherry,"Dat
e",Elderberry
شما می توانید این رفتار را با استفاده از quotechar
و quoting
مولفه های. این quotechar
پارامتر کاراکتر مورد استفاده برای نقل قول را مشخص می کند. پیش فرض یک نقل قول دوگانه است ("
) و ما می توانیم آن را به مثلاً یک نقل قول ('
) با مشخص کردن quotechar
پارامتر در csv.writer()
روش:
writer = csv.writer(output, quotechar="'")
اکنون رشته خروجی همان عناصر قبلی را نقل قول میکند، اما با استفاده از علامتهای نقل قول:
Apple,'Ban,ana',Cherry,'Dat
e',Elderberry
پارامتر دیگری که نقل قول را در csv
ماژول است quoting
پارامتر. این کنترل می کند که چه زمانی نقل قول ها باید توسط csv.writer()
. می تواند طول بکشد روی هر یک از موارد زیر csv
بر اساس ثابت های ماژول روی هنگامی که می خواهید عناصر لیست را نقل قول کنید:
csv.QUOTE_MINIMAL
– نقل قول عناصر فقط در صورت لزوم (پیش فرض)csv.QUOTE_ALL
– نقل قول همه عناصرcsv.QUOTE_NONNUMERIC
– نقل قول همه عناصر غیر عددیcsv.QUOTE_NONE
– چیزی نقل نکنید
فرض کنید میخواهیم همه عناصر را نقلقول کنیم fruits
فهرست ما باید تنظیم کنیم quoting
پارامتر از csv.writer()
روش به csv.QUOTE_ALL
:
writer = csv.writer(output, quoting=csv.QUOTE_ALL)
و این به ما می دهد:
"Apple","Ban,ana","Cherry","Dat
e","Elderberry"
توجه داشته باشید: مطمئناً می توانید این تنظیمات را با هم ترکیب کنید. فرض کنید می خواهید همه عناصر غیر عددی را با علامت نقل قول نقل کنید. شما می توانید به آن دست پیدا کنید:
writer = csv.writer(output, quotechar="'", quoting=csv.QUOTE_ALL)
کنترل پایان خط
این csv
نویسنده استفاده می کند \r\n
(Carriage Return + Line Feed) به عنوان پایان دهنده خط به طور پیش فرض. شما می توانید این را با استفاده از lineterminator
پارامتر هنگام ایجاد a csv.writer
یا csv.DictWriter
هدف – شی. به عنوان مثال، بیایید تنظیم کنیم \n
(تغذیه خط) به عنوان پایان دهنده خط:
import csv
import io
fruits = ('Apple', 'Banana', 'Cherry', 'Date', 'Elderberry')
output = io.StringIO()
writer = csv.writer(output, lineterminator='\n')
writer.writerow(fruits)
csv_string = output.getvalue()
print(csv_string)
توجه داشته باشید: هنگام نوشتن فایلهای CSV در پایتون، بهویژه کاراکترهای پایان خط، همیشه به سازگاری بین پلتفرم و نرمافزار توجه داشته باشید، زیرا سیستمهای مختلف آنها را متفاوت تفسیر میکنند. به عنوان مثال، خط پایان دهنده پیش فرض برای ویندوز مناسب است، اما ممکن است لازم باشد از یک پایانه خط دیگر استفاده کنید (\n
) برای سیستم های یونیکس/لینوکس/مک برای سازگاری بهینه.
مشکلات رایج و عیب یابی
با وجود سادگی نسبی، تبدیل لیست های پایتون به رشته های CSV گاهی اوقات می تواند چالش هایی را ایجاد کند. بیایید برخی از مشکلات رایج و راه حل های آنها را بیان کنیم.
نقل قول های نامتعادل در داده های CSV شما
اگر دادههای CSV شما حاوی نقل قولهای غیرقابل فرار باشد، ممکن است هنگام تلاش برای خواندن یا نوشتن دادههای CSV منجر به مشکلاتی شود.
به عنوان مثال، این لیست را در نظر بگیرید:
fruits = ('Apple', 'Ba"nana', 'Cherry')
در اینجا، دومین مورد در لیست حاوی یک نقل قول است. این می تواند هنگام تبدیل به داده های CSV مشکلاتی ایجاد کند، زیرا از نقل قول برای ترسیم داده های رشته استفاده می شود.
راه حل: اگر می دانید که داده های شما ممکن است حاوی نقل قول باشد، می توانید از آن استفاده کنید quotechar
پارامتر هنگام ایجاد csv.writer
برای تعیین یک کاراکتر دیگر برای نقل قول ها، یا می توانید قبل از تبدیل به CSV از نقل قول ها فرار کنید یا از داده های خود حذف کنید.
جداکننده های نادرست
فرمت CSV از کاما به عنوان جداکننده بین فیلدهای مختلف داده استفاده می کند. با این حال، همه دادههای CSV از کاما استفاده نمیکنند. برخی ممکن است از زبانه ها، نقطه ویرگول یا سایر کاراکترها به عنوان جداکننده استفاده کنند. اگر هنگام نوشتن یا خواندن داده های CSV از جداکننده اشتباه استفاده کنید، ممکن است با خطاها یا خروجی غیرمنتظره مواجه شوید.
راه حل: اگر دادههای CSV شما از جداکننده دیگری استفاده میکند، میتوانید با استفاده از آن آن را مشخص کنید delimiter
پارامتر هنگام ایجاد csv.writer
:
writer = csv.writer(output, delimiter=';')
اختلاط کردن writerow() و Writrows() مواد و روش ها
این writerow()
روش برای نوشتن یک سطر استفاده می شود، در حالی که writerows()
روش برای نوشتن چند ردیف استفاده می شود. اختلاط این دو روش می تواند منجر به نتایج غیرمنتظره شود.
راه حل: استفاده کنید writerow
زمانی که می خواهید یک ردیف بنویسید (که باید یک لیست واحد باشد)، و writerows
زمانی که می خواهید چندین ردیف بنویسید (که باید لیستی از لیست ها باشد).
تلاش برای نوشتن فهرستی از دیکشنری ها با استفاده از csv.writer()
این csv.writer
شی در هنگام فراخوانی انتظار یک لیست را دارد (نماینده یک ردیف). writerow
، یا لیستی از لیست ها (نماینده چندین ردیف) هنگام تماس writerows
. اگر سعی می کنید فهرستی از فرهنگ لغت را با استفاده از csv.writer
، با خطا مواجه خواهید شد.
راه حل: اگر فهرستی از دیکشنری ها دارید، باید از آن استفاده کنید csv.DictWriter
بجای csv.writer
.
نتیجه
تبدیل لیست های پایتون به رشته های CSV یک کار رایج در مدیریت و دستکاری داده ها است. پایتون داخلی csv
کتابخانه مجموعه ای قوی و همه کاره از عملکردها را برای تسهیل این امر فراهم می کند process.
در این مقاله، مراحل مورد نیاز برای انجام چنین تبدیلهایی را طی کردهایم که از درک لیستهای پایتون و فایلهای CSV شروع میشود. csv
کتابخانه در پایتون، تبدیل process هم برای لیست های ساده و هم لیست لغت نامه ها و حتی موضوعات پیشرفته مرتبط با این process.
(برچسبها به ترجمه)# python
منتشر شده در 1402-12-31 16:34:04