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

سرور مجازی NVMe

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

0 80
زمان لازم برای مطالعه: 4 دقیقه


معرفی

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

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

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

پیشنهاد می‌کنیم بخوانید:  تفاوت بین %s و %d در قالب بندی رشته پایتون

با استفاده از 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 فایل ها را به خوبی می خواند.

پیشنهاد می‌کنیم بخوانید:  شمارشگر کاراکتر برای مناطق متنی با جاوا اسکریپت وانیلی شمارشگر کاراکتر یک ویژگی رابط کاربری مفید است که تعداد کاراکترهای باقیمانده را که کاربر می‌تواند در یک فیلد متنی وارد کند را نشان می‌دهد - اگر یک فیلد متنی به اندازه ورودی نسبتاً کوچک محدود شده باشد (مانند محدودیت توییتر). روی 280 کاراکتر در هر توییت). این ویژگی معمولا استفاده می شود ...

با استفاده از ترشی مدول

به عنوان جایگزینی برای 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

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

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

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