Чтение и запись списков в файл в Python

Введение

Программисты Python интенсивно используют массивы, списки и словари в качестве сериализованных структур данных. Хранение этих структур данных постоянно требует либо файла, либо базы данных для правильной работы.

В этой статье мы рассмотрим, как записать список в файл и как прочитать этот список обратно в память.

к записать данные в файлИ читать данные из файла, язык программирования Python предлагает стандартные методы 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)

Имейте в виду, что вам нужно будет удалить разрыв строки с конца строки. В этом случае нам помогает то, что 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 Object Notation (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. Это упрощает постоянное хранение списка и чтение его обратно в память.

Отметка времени:

Больше от Стекабьюс