Читання та запис списків у файл у Python

Вступ

Програмісти Python інтенсивно використовують масиви, списки та словники як серіалізовані структури даних. Для постійного зберігання цих структур даних потрібен файл або база даних для належної роботи.

У цій статті ми розглянемо, як записати список у файл і як прочитати цей список назад у пам’ять.

До записати дані у файлІ читати дані з файлу, мова програмування Python пропонує стандартні методи write() та read() для роботи з одним рядком, а також writelines() та readlines() для роботи з кількома рядками. Крім того, обидва pickle і json модулі також дозволяють розумні способи роботи з серіалізованими наборами даних.

Використання читати () та write () Методи

Для роботи з символами (рядками) основні 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)

Майте на увазі, що вам потрібно буде видалити розрив рядка з кінця рядка. У цьому випадку нам допомагає те, що Python також дозволяє виконувати операції списку над рядками. Це видалення виконується просто як операція списку над самим рядком, яка зберігає все, крім останнього елемента. Цей елемент містить символ "n" який представляє розрив рядка в системах UNIX/Linux.

Використання writelines () та readlines() Методи

Як згадувалося на початку цієї статті, Python також містить два методи: 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() метод. По-третє, рядок додається до списку місць як новий елемент списку.

У порівнянні з попереднім лістингом код набагато компактніший, але його може бути складніше читати початківцям програмістам на Python.

Використання модуля Joblib

Початкові методи, пояснені досі, зберігають список таким чином, що люди можуть його прочитати – буквально послідовний список у файлі. Це чудово підходить для створення простих звітів або виведення файлів експорту для подальшого використання користувачами, наприклад файлів CSV. Однак якщо ваша мета — просто серіалізувати список у файл, який можна буде завантажити пізніше, немає потреби зберігати його в зручному для читання форматі.

Команда joblib модуль надає найпростіший спосіб створити дамп об’єкта Python (може бути будь-яким об’єктом):

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 працює з усіма типами об’єктів Python, такими як рядки, числа, самовизначені структури та будь-які інші вбудовані структури даних, які надає Python.

Використання формату JSON

Двійковий формат даних pickle використання є специфічним для Python. Щоб покращити взаємодію між різними програмами, нотація об’єктів JavaScript (JSON) забезпечує просту у використанні та зрозумілу людині схему, і тому стала дуже популярною для серіалізації файлів і спільного використання ними через API.

Ознайомтеся з нашим практичним практичним посібником із вивчення Git з передовими методами, прийнятими в галузі стандартами та включеною шпаргалкою. Припиніть гуглити команди 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