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

В качестве сериализованных структур данных программисты Python интенсивно используют массивы, списки и словари. Для постоянного хранения этих структур данных требуется файл или база данных для работы. В этой статье описывается, как записать список в файл и как прочитать этот список обратно в память. Для записи данных в файл [/ writing-files-using-python /] и чтения данных из файла [/ read-files-with-python /] язык программирования Python предлагает стандартные методы write () и read. () для раздачи w

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

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

Использование методов чтения и записи

Для работы с символами (строками) отлично работают основные методы. Сохранить такой список построчно в файл listfile.txt можно следующим образом:

 # define list of places 
 places = ['Berlin', 'Cape Town', 'Sydney', 'Moscow'] 
 
 with open('listfile.txt', 'w') as filehandle: 
 for listitem in places: 
 filehandle.write('%s\n' % listitem) 

В строке 6 listitem , во-первых, расширяется переносом строки "\ n" и, во-вторых, сохраняется в выходном файле. Чтобы прочитать весь список из файла listfile.txt обратно в память, этот код Python показывает вам, как это работает:

 # define an empty list 
 places = [] 
 
 # open file and read the content in a list 
 with open('listfile.txt', 'r') as filehandle: 
 for line in filehandle: 
 # remove linebreak which is the last character of the string 
 currentPlace = line[:-1] 
 
 # add item to the list 
 places.append(currentPlace) 

Имейте в виду, что вам нужно удалить перенос строки с конца строки. В этом случае нам помогает то, что Python также допускает операции со списком для строк. В строке 8 приведенного выше кода это удаление просто выполняется как операция списка над самой строкой, которая сохраняет все, кроме последнего элемента. Этот элемент содержит символ «\ n», обозначающий разрыв строки в системах UNIX / Linux.

Использование методов Writelines и Readlines

Как упоминалось в начале этой статьи, Python также содержит два метода writelines() и readlines() для записи и чтения нескольких строк за один шаг соответственно. Чтобы записать весь список в файл на диске, код Python выглядит следующим образом:

 # define list of places 
 places_list = ['Berlin', 'Cape Town', 'Sydney', 'Moscow'] 
 
 with open('listfile.txt', 'w') as filehandle: 
 filehandle.writelines("%s\n" % place for place in places_list) 

Чтобы прочитать весь список из файла на диске, код Python выглядит следующим образом:

 # define empty list 
 places = [] 
 
 # open file and read the content in a list 
 with open('listfile.txt', 'r') as filehandle: 
 filecontents = filehandle.readlines() 
 
 for line in filecontents: 
 # remove linebreak which is the last character of the string 
 current_place = line[:-1] 
 
 # add item to the list 
 places.append(current_place) 

Приведенный выше листинг следует более традиционному подходу, заимствованному из других языков программирования. Чтобы написать его более питоническим способом, взгляните на приведенный ниже код:

 # define empty list 
 places = [] 
 
 # open file and read the content in a list 
 with open('listfile.txt', 'r') as filehandle: 
 places = [current_place.rstrip() for current_place in filehandle.readlines()] 

После открытия файла listfile.txt в строке 5 восстановление списка происходит полностью в строке 6. Во-первых, содержимое файла считывается с помощью readlines() . Во-вторых, в for из каждой строки удаляется rstrip() . В-третьих, строка добавляется в список мест как новый элемент списка. По сравнению с приведенным выше листингом код намного компактнее, но может быть более трудным для чтения для начинающих программистов Python.

Использование модуля pickle

Различные методы, описанные до сих пор, хранят список таким образом, чтобы люди могли его прочитать. Если в этом нет необходимости, модуль pickle может вам пригодиться. Его dump() эффективно сохраняет список как поток двоичных данных. Во-первых, в строке 7 (в приведенном ниже коде) выходной файл listfile.data открывается для двоичной записи («wb»). Во-вторых, в строке 9
список сохраняется в открытом файле с помощью метода dump()

 # load additional module 
 import pickle 
 
 # define a list of places 
 placesList = ['Berlin', 'Cape Town', 'Sydney', 'Moscow'] 
 
 with open('listfile.data', 'wb') as filehandle: 
 # store the data as binary data stream 
 pickle.dump(placesList, filehandle) 

Следующим шагом мы читаем список из файла следующим образом. Во-первых, выходной файл listfile.data открывается в двоичном формате для чтения («rb») в строке 4. Во-вторых, список мест загружается из файла с помощью метода load()

 # load additional module 
 import pickle 
 
 with open('listfile.data', 'rb') as filehandle: 
 # read the data as binary data stream 
 placesList = pickle.load(filehandle) 

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

Использование формата JSON

Двоичный формат данных, который pickle специфичен для Python. Чтобы улучшить взаимодействие между различными программами, нотация объектов JavaScript ( JSON ) предоставляет простую в использовании и удобочитаемую схему и, таким образом, стала очень популярной.

В следующем примере показано, как записать список смешанных типов переменных в выходной файл с помощью модуля json. В строке 4 определяется основной список. Открыв выходной файл для записи в строке 7, метод dump() сохраняет основной список в файле, используя нотацию JSON.

 import json 
 
 # define list with values 
 basicList = [1, "Cape Town", 4.6] 
 
 # open output file for writing 
 with open('listfile.txt', 'w') as filehandle: 
 json.dump(basicList, filehandle) 

Чтение содержимого выходного файла обратно в память так же просто, как запись данных. Соответствующий метод для dump() называется load() и работает следующим образом:

 import json 
 
 # open output file for reading 
 with open('listfile.txt', 'r') as filehandle: 
 basicList = json.load(filehandle) 

Заключение

Различные методы, показанные выше, варьируются от простой записи / чтения данных до сброса / загрузки данных через двоичные потоки с использованием pickle и JSON. Это упрощает постоянное хранение списка и чтение его обратно в память.

Благодарности

Автор благодарит Золеку Хатитонгве за поддержку при подготовке статьи.

comments powered by Disqus