وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

روش تبدیل لیست به رشته CSV در پایتون

0 23
زمان لازم برای مطالعه: 8 دقیقه


معرفی

در زمینه های مبتنی بر داده مانند تجزیه و تحلیل داده ها، یادگیری ماشین و توسعه وب، شما اغلب نیاز دارید که داده ها را از یک قالب به فرمت دیگر تبدیل کنید تا متناسب با نیازهای خاص باشد. یک نیاز رایج تبدیل یک لیست پایتون به یک رشته 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 ارائه می‌کند، اما برای هدف این مقاله، ما به چند مورد از آنها نیاز داریم:

  1. csv.writer() – یک شی نویسنده مسئول تبدیل داده های کاربر به رشته های محدود شده را برمی گرداند روی شیء فایل مانند داده شده
  2. 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

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید