از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
خواندن و نوشتن لیست ها در یک فایل در پایتون
سرفصلهای مطلب
معرفی
برنامه نویسان پایتون به شدت از آرایه ها، لیست ها و دیکشنری ها به عنوان ساختارهای داده سریالی استفاده می کنند. ذخیره سازی این ساختارهای داده به طور مداوم به یک فایل یا یک پایگاه داده نیاز دارد تا به درستی کار کند.
در این مقاله، روش نوشتن یک لیست در فایل و روش بازخوانی آن لیست در حافظه را بررسی خواهیم کرد.
برای نوشتن داده ها در یک فایل و خواندن داده ها از یک فایل، زبان برنامه نویسی پایتون روش های استاندارد را ارائه می دهد write()
و read()
برای برخورد با یک خط واحد، و همچنین writelines()
و readlines()
برای برخورد با خطوط متعدد علاوه بر این، هر دو pickle
و json
ماژولها روشهای هوشمندانهای را برای برخورد با مجموعههای داده سریالی نیز امکان پذیر میسازند.
با استفاده از خواندن() و نوشتن() مواد و روش ها
برای مقابله با کاراکترها (رشته ها) اساس read()
و write()
روش ها عالی کار می کنند ذخیره چنین لیستی خط به خط در فایل listfile.txt
می توان به صورت زیر انجام داد:
places = ('Berlin', 'Cape Town', 'Sydney', 'Moscow')
with open('listfile.txt', 'w') as filehandle:
for listitem in places:
filehandle.write(f'{listitem}\n')
را listitem
با شکست خط تمدید می شود "\n"
ابتدا، و سپس در فایل خروجی ذخیره می شود. اکنون میتوانیم نگاهی به روش خواندن کل لیست از فایل بیندازیم listfile.txt
بازگشت به حافظه:
places = ()
with open('listfile.txt', 'r') as filehandle:
for line in filehandle:
curr_place = line(:-1)
places.append(curr_place)
به خاطر داشته باشید که باید خط شکسته را از انتهای رشته حذف کنید. در این مورد، به ما کمک می کند که پایتون به عملیات لیست اجازه دهد روی رشته ها هم این حذف به سادگی به عنوان عملیات لیست انجام می شود روی خود رشته، که همه چیز را به جز آخرین عنصر نگه می دارد. این عنصر شامل شخصیت است "\n"
که نشان دهنده شکست خط است روی سیستم های یونیکس/لینوکس
با استفاده از Writlines() و Readlines() مواد و روش ها
همانطور که در ابتدای این مقاله ذکر شد، پایتون همچنین شامل دو روش است – writelines()
و readlines()
– به ترتیب نوشتن و خواندن چندین خط در یک مرحله. بیایید کل لیست را در یک فایل بنویسیم روی دیسک:
places_list = ('Berlin', 'Cape Town', 'Sydney', 'Moscow')
with open('listfile.txt', 'w') as filehandle:
filehandle.writelines(f"{place for place in places_list}\n")
برای خواندن کل لیست از یک فایل روی دیسکی که ما نیاز داریم:
places = ()
with open('listfile.txt', 'r') as filehandle:
filecontents = filehandle.readlines()
for line in filecontents:
curr_place = line(:-1)
places.append(curr_place)
کد بالا از رویکرد سنتی تری پیروی می کند که از زبان های برنامه نویسی دیگر وام گرفته شده است. بیایید آن را در ادامه مطلب بنویسیم پایتونیک مسیر:
places = ()
with open('listfile.txt', 'r') as filehandle:
places = (current_place.rstrip() for current_place in filehandle.readlines())
ابتدا محتوای فایل از طریق خوانده می شود readlines()
. ثانیاً در الف for
حلقه از هر خط، کاراکتر شکست خط با استفاده از علامت حذف می شود rstrip()
روش. ثالثاً، رشته به عنوان یک آیتم لیست جدید به لیست مکان ها اضافه می شود.
در مقایسه با لیست قبلی، کد بسیار فشرده تر است، اما ممکن است خواندن آن برای برنامه نویسان مبتدی پایتون دشوارتر باشد.
با استفاده از ماژول Joblib
روشهای اولیه که تاکنون توضیح داده شده است، فهرست را بهگونهای ذخیره میکند که انسانها هنوز بتوانند آن را بخوانند – به معنای واقعی کلمه یک لیست متوالی در یک فایل. این برای ایجاد گزارش های ساده یا خروجی عالی است export فایل هایی برای استفاده بیشتر کاربران، مانند فایل های CSV. با این حال – اگر هدف شما فقط سریال کردن یک لیست در یک فایل است که می تواند بعداً بارگیری شود، نیازی به ذخیره آن در قالب قابل خواندن توسط انسان نیست.
را joblib
ماژول ساده ترین راه را برای dump یک شی پایتون (واقعاً می تواند هر شیئی باشد):
import joblib
places = ('Berlin', 'Cape Town', 'Sydney', 'Moscow')
joblib.dump(places, 'places.sav')
places = joblib.load('places.sav')
print(places)
joblib
سادهترین و تمیزترین راه برای سریالسازی اشیا در قالبی کارآمد و بارگذاری آنها بعداً باقی میماند. شما می توانید از هر قالب دلخواه استفاده کنید، مانند .sav
، .data
و غیره واقعاً مهم نیست – هر دو joblib
و جایگزین هایی مانند pickle
فایل ها را به خوبی می خواند.
با استفاده از ترشی مدول
به عنوان جایگزینی برای joblib
، ما میتوانیم استفاده کنیم pickle
! آن dump()
متد لیست را به صورت کارآمد به عنوان یک جریان داده باینری ذخیره می کند. ابتدا فایل خروجی listfile.data
برای نوشتن باینری باز می شود ("wb"
). در مرحله دوم، لیست با استفاده از فایل باز شده ذخیره می شود dump()
روش:
import pickle
places = ('Berlin', 'Cape Town', 'Sydney', 'Moscow')
with open('listfile.data', 'wb') as filehandle:
pickle.dump(places, filehandle)
در مرحله بعد لیست را از روی فایل به صورت زیر می خوانیم. ابتدا فایل خروجی listfile.data
باینری برای خواندن باز می شود ("rb"
). در مرحله دوم، لیست مکان ها از فایل با استفاده از بارگذاری می شود load()
روش:
import pickle
with open('listfile.data', 'rb') as filehandle:
placesList = pickle.load(filehandle)
دو مثال در اینجا استفاده از رشته ها را نشان می دهد. با اینکه، pickle
با انواع اشیاء پایتون مانند رشته ها، اعداد، ساختارهای خود تعریف شده و هر ساختار داده داخلی دیگری که پایتون ارائه می دهد کار می کند.
با استفاده از فرمت JSON
فرمت داده باینری pickle
کاربردها مختص پایتون است. برای بهبود قابلیت همکاری بین برنامه های مختلف، علامت گذاری شی جاوا اسکریپت (JSON) طرحواره ای با کاربری آسان و قابل خواندن برای انسان ارائه می دهد و بنابراین برای سریال سازی فایل ها و به اشتراک گذاری آنها از طریق API ها بسیار محبوب شد.
مثال زیر روش نوشتن لیستی از انواع متغیرهای مختلط را در یک فایل خروجی با استفاده از json مدول. پس از باز کردن فایل خروجی برای نوشتن، dump()
متد لیست اصلی را در فایل با استفاده از نماد JSON ذخیره می کند:
import json
basic_list = (1, "Cape Town", 4.6)
with open('listfile.txt', 'w') as filehandle:
json.dump(basic_list, filehandle)
خواندن مجدد محتویات فایل خروجی در حافظه به سادگی نوشتن داده است. روش مربوطه به dump()
نامیده می شود load()
:
import json
with open('listfile.txt', 'r') as filehandle:
basic_list = json.load(filehandle)
نتیجه
روشهای مختلفی که در بالا نشان دادهایم، از نوشتن/خواندن دادهها تا تخلیه/بارگیری دادهها از طریق جریانهای باینری با استفاده از pickle و JSON متغیر است. این کار ذخیره مداوم یک لیست و خواندن مجدد آن در حافظه را ساده می کند.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-03 16:37:04