Как записать список в файл Python

Обновлено: 02.07.2024

В этом кратком руководстве демонстрируются три метода записи списка в файл на языке сценариев Python.

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

Запись списка в файл на Python

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

Способ 1. Запись списка в файл построчно в Python с помощью print

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

Вот пример программы на Python для справки:

Файл output.txt открывается в режиме записи. Цикл for в python выполняет итерацию для каждого элемента в списке. Команды печати записывают элемент в открытый файл.

Как видите, элементы списка были записаны построчно в выходной файл.

В примерах файл был открыт в режиме записи с параметром «w». Все предыдущее содержимое файла в этом режиме будет перезаписано.

Если вы хотите сохранить предыдущее содержимое файла, вы можете открыть файл в режиме добавления, используя параметр «a» вместо «w».

Способ 2: запись списка в файл с использованием функции Write в Python

Теперь давайте посмотрим на другой способ сохранения списка в файл в Python. Мы собираемся использовать функцию Write().

Функция write() принимает строку в качестве аргумента. Итак, мы снова будем использовать цикл for, чтобы перебирать каждый элемент в списке и записывать его в файл.

Вот пример программы на Python:

Обратите внимание, что элементы в списке не имеют символа новой строки. Вот почему я добавил новый символ строки «\n» после каждой итерации, чтобы элементы списка записывались в файл построчно. Если вы этого не сделаете, вы увидите все содержимое списка в одной строке.

Способ 3. Запишите все строки в файл одновременно, используя функцию writelines()

Два других метода, которые мы видели, записывали содержимое списка в файл построчно. Метод writelines() отличается. Этот метод принимает список в качестве входных данных и записывает список как есть в открытый файл.

Вот простая программа:

Если вы используете команду для просмотра файла в командной строке Linux, вот что вы увидите в выводе:

Согласен, это не самый лучший результат. Но это точное содержание списка.

Если вы хотите напечатать построчный текст в файл с помощью функции writelines, вы все равно можете это сделать, но вам придется приложить дополнительные усилия.

Здесь вы можете изменить сам список и добавить символ новой строки после каждого элемента. И теперь, если вы напечатаете список с помощью writelines(), вы получите вывод построчно.

Вот пример программы для этого:

Я надеюсь, что этот небольшой совет помог вам написать список в файл с помощью Python. Если вы используете какой-либо другой способ, поделитесь им с нами. Если урок помог вам, дайте мне знать, оставив комментарий ниже.

Абхишек Пракаш

Создатель справочника Linux и его СОПО. Ярый пользователь Linux и сторонник открытого исходного кода. Большой поклонник классических детективов от Агаты Кристи и Шерлока Холмса до Коломбо и Эллери Куин.


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

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

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

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

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

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

Использование методов writelines и readlines

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

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

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

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

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

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

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

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

Это самый чистый способ записать список в файл, поскольку writelines() не вставляет символы новой строки?

Кажется, есть стандартный способ.

Обратите внимание, что writelines не добавляет новые строки, потому что они отражают readlines , которые также не удаляют их.

26 ответов 26

Вы можете использовать цикл:

В Python 2 вы также можете использовать

Если вы заинтересованы в вызове одной функции, по крайней мере, удалите квадратные скобки [] , чтобы строки для печати создавались по одной (genexp, а не listcomp). использовать всю память, необходимую для материализации всего списка строк.

Это не очень сложно, но почему бы просто не использовать pickle или json, чтобы не беспокоиться о сериализации и десериализации?

Например, потому что вам нужен выходной текстовый файл, который можно легко читать, редактировать и т. д., с одним элементом в строке. Вряд ли редкое желание ;-).

Это добавит дополнительный символ новой строки в конце. вместо цикла вы можете просто написать thefile.write('\n'.join(thelist))

Я бы добавил: "Будьте осторожны с типом данных list". У меня были странные результаты, возможно, это может кому-то помочь: thefile.write(str(item) + "\n")

Что вы собираетесь делать с файлом? Существует ли этот файл для людей или других программ с четкими требованиями совместимости?

Если вы просто пытаетесь сериализовать список на диск для последующего использования тем же приложением Python, вы должны выбрать список.

Чтобы прочитать это обратно:

+1 - внешний файл выглядит примерно так: open( "save.p", "wb" ) внутренний файл выглядит примерно так: open( "save.p", "rb" )

В Python 2 используйте 'r' вместо 'rb' при чтении рассола, если вы получаете сообщение "ValueError: insecure string pickle"

@serafeim: нет; блок with: закроет файл, прежде чем перейти к следующему оператору за пределами блока with.

Более простой способ:

Вы можете убедиться, что все элементы в списке элементов являются строками, используя выражение генератора:

Помните, что весь список элементов должен находиться в памяти, поэтому позаботьтесь о потреблении памяти.

Конечно, первый вопрос, который приходит на ум, заключается в том, нужно ли OP, чтобы он заканчивался новой строкой, и имеет ли значение количество места. Вы знаете, что говорят о преждевременной оптимизации.

Недостаток: при этом все содержимое файла создается в памяти до того, как оно будет записано, поэтому пиковое использование памяти может быть высоким.

Я никогда не смогу заставить это работать. Я получаю эту ошибку: "text = '\n'.join(namelist) + '\n' TypeError: элемент последовательности 0: ожидаемая строка, список найден"

Использование синтаксиса Python 3 и Python 2.6+:

Это не зависит от платформы.Он также завершает последнюю строку символом новой строки, что рекомендуется для UNIX.

Начиная с Python 3.6, "<>\n".format(item) можно заменить f-строкой: f"\n" .

Еще один способ. Сериализация в json с помощью simplejson (входит в состав json в python 2.6):

Если вы просматриваете файл output.txt:

Это полезно, потому что синтаксис написан на языке Python, он удобочитаем и может быть прочитан другими программами на других языках.

Я подумал, что было бы интересно изучить преимущества использования genexp, так что вот мое мнение.

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

Что без необходимости создает временный список всех строк, которые будут записаны, это может потреблять значительный объем памяти в зависимости от размера вашего списка и того, насколько подробным является вывод str(item).

Отбрасывание квадратных скобок (эквивалентно удалению вызова wrapping list() выше) вместо этого передаст временный генератор в file.writelines() :

Этот генератор создаст представление ваших объектов элементов, заканчивающееся новой строкой, по запросу (т. е. по мере их записи). Это хорошо по нескольким причинам:

  • Затраты памяти невелики даже для очень больших списков.
  • Если str(item) работает медленно, в файле отображается прогресс по мере обработки каждого элемента

Это позволяет избежать проблем с памятью, таких как:

(Я вызвал эту ошибку, ограничив максимальную виртуальную память Python до ~ 100 МБ с помощью ulimit -v 102400 ).

Не говоря уже об использовании памяти, этот метод на самом деле не быстрее исходного:

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

Общий подход к записи элементов списка в файл с помощью Python заключается в том, чтобы сначала просмотреть элементы списка с помощью цикла for. Затем используйте файловый объект для записи каждого элемента списка в файл как часть каждой итерации цикла. Файловый объект должен быть открыт в режиме записи.

Существует множество сценариев, в которых запись элементов списка в файл может оказаться полезной.

Давайте рассмотрим один пример!

Как сохранить элементы списка Python в файле

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

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

Давайте посмотрим, как можно взять приведенный ниже список строк и сохранить каждую строку в файле с помощью Python.

Мы откроем файловый объект в режиме записи, а затем воспользуемся циклом for для записи каждого элемента в файл:

С помощью встроенной функции Python open() мы открываем новый файл в режиме записи. Каждая итерация цикла for записывает в файл месяц.

Затем мы закрываем файловый объект после того, как запишем в него все элементы списка.

Теперь давайте посмотрим, как выглядит содержимое файла с помощью команды cat:

Похоже, нам не хватает символов новой строки в конце каждой строки, давайте добавим их в метод записи на каждой итерации цикла for:

Теперь результат выглядит намного лучше:

Какую ошибку вы видите при записи в файл, открытый в режиме чтения?

Я хочу посмотреть, что произойдет, если мы не откроем файл явно в режиме записи.

Замените следующую строку в коде Python:

Со следующим…

…обратите внимание, что мы удалили второй параметр, переданный функции open(), который сообщал функции открыть файл в режиме записи:

Вот ошибка, которую мы получаем при запуске нашего кода, если мы не удаляем файл month.txt, созданный в предыдущем примере:

Ошибка говорит нам о том, что файл не был открыт для записи. Без передачи второго параметра в функцию open() мы открыли наш файл в режиме чтения.

Если вы удалите файл month.txt и перезапустите программу, вы получите другую ошибку:

Интерпретатор Python пытается открыть файл в режиме чтения, но, учитывая, что файл не существует, мы возвращаем ошибку «Нет такого файла или каталога».

Запись списка в файл с помощью оператора With Open

Вместо того, чтобы помнить о закрытии файлового объекта после окончания цикла for, мы можем использовать оператор Python with open.

Это создает менеджер контекста, который автоматически закрывает файловый объект, когда он нам больше не нужен.

Вот как наш код Python становится…

Намного короче!

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

Запись списка в файл с использованием метода соединения строк

Интересно, можно ли заменить цикл for одной строкой, использующей метод string join().

Метод соединения строк объединяет элементы последовательности в одну строку, где каждый элемент отделен от другого строкой, к которой применяется метод соединения.

Возможно, это проще показать в оболочке Python 🙂

Доллар в конце последней строки — это сама оболочка, учитывая, что символ новой строки отсутствует в конце последней строки.

Таким образом, этот метод работает, но не так хорошо, как цикл for, потому что он не добавляет символ новой строки в последнюю строку файла.

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

Файловый объект Python предоставляет метод writelines(), который записывает последовательность строк в файл.

Кажется, это может быть еще один хороший способ сделать это, давайте попробуем!

Вот результат, когда я запускаю программу:

Хммм… это выглядит неправильно.

Метод file writelines() не добавляет разделителей строк.

Что мы могли бы сделать, так это добавить символ новой строки после каждого элемента в списке, а затем передать список методу writelines.

Давайте воспользуемся для этого пониманием списка:

Вы можете видеть, что мы также используем метод string format() для добавления символа новой строки в конце каждой строки в списке.

Вывод, который мы получаем, выглядит хорошо:

Как записать список в файл с помощью Python Lambda

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

Использование лямбда-выражений на самом деле не обязательно, мы делаем это в этом руководстве в качестве упражнения, чтобы освежить в памяти более сложные концепции Python.

Ниже вы можете увидеть синтаксис функции карты:

Функция карты применяет функцию, переданную в качестве первого параметра, к каждому элементу итерируемого объекта. В этом случае функция будет лямбда-функцией, которая добавляет символ новой строки к заданной строке и записывает результат в файловый объект.

Мы будем использовать это как общий подход для записи каждого элемента в списке, за которым следует новая строка, в выходной файл.

Вот используемая лямбда-функция:

А теперь давайте передадим лямбду в функцию карты:

Проверим правильность вывода...

Заключение

Мы видели так много разных подходов к записи элементов списка Python в файл.

Хорошим упражнением было попрактиковаться в нескольких способах решения одной и той же задачи в Python.

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

Использование цикла для записи списка в файл в Python

Использование цикла для записи списка в файл — очень простой и наиболее часто используемый подход. Цикл используется для перебора элементов списка, а метод write() используется для записи элементов списка в файл.

Мы используем метод open(), чтобы открыть файл назначения. Режим открытия файла должен быть w, что означает запись.

Пример кода приведен ниже:

Для Python 2.x также используется следующий подход:

Оба кода приведут к записи списка в файл с помощью Python.

Использование модуля Pickle для записи списка в файл на Python

Модуль Pickle Python используется для сериализации или десериализации структуры объектов Python. Если вы хотите сериализовать список для последующего использования в том же файле Python, можно использовать pickle. Так как модуль pickle реализует бинарные протоколы, то и файл нужно открывать в режиме бинарной записи - wb .

Метод pickle.dump() используется для записи списка в файл. В качестве параметров он принимает список и ссылку на файл.

Пример кода для этого подхода:

Использование метода join() для записи списка в файл

Еще один более простой подход к записи списка в файл в Python — использование метода join(). В качестве входных данных он принимает элементы списка.

Пример кода для использования этого метода показан ниже:

Использование модуля JSON для записи списка в файл

Использование модуля pickle в Python очень специфично. JSON делает различные программы более эффективными и простыми для понимания. Модуль JSON используется для записи смешанных типов переменных в файл.

Он использует метод dump(), который принимает список элементов и ссылок на файл в качестве входных данных.

Пример кода:

Статьи DelftStack написаны такими же фанатами программного обеспечения, как и вы. Если вы также хотите внести свой вклад в DelftStack, написав платные статьи, вы можете посетить страницу «Написать для нас».

Статья по теме — Список Python

Статья по теме — файл Python


сообщить об этом объявлении

Читайте также: