خواندن و نوشتن لیست ها در یک فایل در پایتون

معرفی

برنامه نویسان پایتون به شدت از آرایه ها، لیست ها و دیکشنری ها به عنوان ساختارهای داده سریالی استفاده می کنند. ذخیره سازی این ساختارهای داده به طور مداوم به یک فایل یا یک پایگاه داده نیاز دارد تا به درستی کار کند.

در این مقاله، نحوه نوشتن یک لیست در فایل و نحوه بازخوانی آن لیست در حافظه را بررسی خواهیم کرد.

به نوشتن داده ها در یک فایل، و به خواندن داده ها از یک فایل، زبان برنامه نویسی پایتون روش های استاندارد را ارائه می دهد 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')

La 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

روش‌های اولیه که تاکنون توضیح داده شده است، فهرست را به‌گونه‌ای ذخیره می‌کند که انسان‌ها همچنان بتوانند آن را بخوانند - به معنای واقعی کلمه یک لیست متوالی در یک فایل. این برای ایجاد گزارش های ساده یا خروجی فایل های صادراتی برای استفاده بیشتر کاربران، مانند فایل های CSV، عالی است. با این حال - اگر هدف شما فقط سریال کردن یک لیست در یک فایل است که می تواند بعداً بارگیری شود، نیازی به ذخیره آن در قالب قابل خواندن توسط انسان نیست.

La joblib ماژول ساده ترین راه را برای تخلیه یک شی پایتون ارائه می دهد (در واقع می تواند هر شیئی باشد):

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 ها بسیار محبوب شد.

راهنمای عملی و عملی ما برای یادگیری Git را با بهترین روش ها، استانداردهای پذیرفته شده در صنعت و برگه تقلب شامل بررسی کنید. دستورات Google Git را متوقف کنید و در واقع یاد گرفتن آی تی!

مثال زیر نحوه نوشتن لیستی از انواع متغیرهای مختلط را در یک فایل خروجی با استفاده از 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 متغیر است. این کار ذخیره مداوم یک لیست و خواندن مجدد آن در حافظه را ساده می کند.

تمبر زمان:

بیشتر از Stackabuse