Автор оригинала: Marcus Sanatan.
Сохранение текста, JSON и CSV в файл на Python
Сохранение данных в файл-одна из самых распространенных задач программирования, с которой вы можете столкнуться в своей жизни разработчика.
Как правило, программы принимают некоторый ввод и производят некоторый вывод. Есть множество случаев, в которых мы хотели бы сохранить эти результаты. Мы можем обнаружить, что сохраняем данные в файл для последующей обработки – с веб – страниц, которые мы просматриваем, простых дампов табличных данных, которые мы используем для отчетов, машинного обучения и обучения или ведения журнала во время выполнения приложения-мы полагаемся на приложения, пишущие в файлы, а не делающие это вручную.
Python позволяет нам сохранять файлы различных типов без использования сторонних библиотек. В этой статье мы погрузимся в сохранение наиболее распространенных форматов файлов в Python.
Открытие и закрытие файла
Открытие файла
К содержимому файла можно получить доступ, когда он открыт, и он больше не доступен для чтения и записи после его закрытия.
Открыть файл в Python очень просто:
my_data_file = open('data.txt', 'w')
При открытии файла вам понадобится имя файла – строка, которая может быть относительным или абсолютным путем. Второй аргумент-это режим, который определяет действия, которые вы можете сделать с открытым файлом.
Вот некоторые из наиболее часто используемых:
r
– (режим по умолчанию) откройте файл для чтенияw
– открыть файл для записи, перезаписав содержимое, если файл уже существует с даннымиx
– создает новый файл с ошибкой, если он существуетa
– открыть файл для записи, добавив новые данные в конце содержимого файла, если он уже существуетb
– запись двоичных данных в файлы вместо текстовых данных по умолчанию+
– разрешить чтение и запись в режим
Допустим, вы хотите записать файл, а затем прочитать его после этого, ваш режим должен быть ” w+”. Если вы хотите писать, а затем читать из файла, не удаляя предыдущее содержимое, то вы будете использовать ” а+”.
Закрытие файла
Закрыть файл в Python еще проще:
my_data_file.close()
Вам просто нужно вызвать метод close для объекта file. Очень важно закрыть файл после того, как вы закончите его использовать, и для этого есть много веских причин:
- Открытые файлы занимают место в оперативной памяти
- Более низкая вероятность повреждения данных, поскольку они больше не доступны
- Существует ограничение на количество файлов, которые может открыть ваша ОС
Для небольших скриптов это не является насущной проблемой, и некоторые реализации Python фактически автоматически закрывают файлы для вас, но для больших программ не оставляйте закрытие файлов на волю случая и убедитесь, что вы освободили использованные ресурсы.
Использование ключевого слова “with”
О закрытии файла можно легко забыть, ведь мы все-таки люди. К счастью для нас, в Python есть механизм, позволяющий использовать файл и автоматически закрывать его, когда мы закончим.
Для этого нам просто нужно использовать ключевое слово with
:
with open('data.txt', 'w') as my_data_file: # TODO: write data to the file # After leaving the above block of code, the file is closed
Файл будет открыт для всего кода, который имеет отступ после использования ключевого слова with
, помеченного как # TODO
comment. Как только этот блок кода будет завершен, файл будет автоматически закрыт.
Это рекомендуемый способ открытия и записи в файл, поскольку вам не нужно вручную закрывать его, чтобы освободить ресурсы, и он предлагает безотказный механизм, чтобы держать ваш ум на более важных аспектах программирования.
Сохранение текстового файла
Теперь, когда мы знаем лучший способ доступа к файлу, давайте сразу приступим к записи данных.
К счастью, Python также делает это простым:
with open('do_re_mi.txt', 'w') as f: f.write('Doe, a deer, a female deer\n') f.write('Ray, a drop of golden sun\n')
Функция write()
берет строку и помещает это содержимое в поток файлов. Хотя мы не храним его, функция write()
возвращает количество только что введенных символов, то есть длину входной строки.
Примечание : Обратите внимание на включение символа новой строки, \n
. Он используется для записи в следующую строку файла, в противном случае весь текст будет добавлен как одна строка.
Сохранение нескольких строк одновременно
С помощью функции write()
мы можем взять одну строку и поместить ее в файл. Что, если бы мы захотели написать сразу несколько строк?
Мы можем использовать функцию writelines()
для помещения данных в последовательность (например, список или кортеж) и в файл:
with open('browsers.txt', 'w') as f: web_browsers = ['Firefox\n', 'Chrome\n', 'Edge\n'] f.writelines(web_browsers)
Как и прежде, если мы хотим, чтобы данные появлялись в новых строках, мы включаем символ новой строки в конце каждой строки.
Если вы хотите пропустить шаг ручного ввода символа новой строки после каждого элемента в списке, его легко автоматизировать:
with open('browsers.txt', 'w') as f: web_browsers = ['Firefox\n', 'Chrome\n', 'Edge\n'] f.writelines("%s\n" % line for line in web_browsers)
Примечание : Вход для write lines()
должен быть плоской последовательностью строк или байтов – никакие числа, объекты или вложенные последовательности, такие как список внутри списка, не допускаются.
Если вам интересно узнать больше о списках и кортежах, у нас уже есть статья, посвященная им – Списки против кортежей в Python .
Сохранение CSV-файла
Файлы CSV (значения, разделенные запятыми) обычно используются для хранения табличных данных. Из-за своей популярности Python имеет некоторые встроенные методы, облегчающие написание файлов такого типа:
import csv weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'] sales = ['10', '8', '19', '12', '25'] with open('sales.csv', 'w') as csv_file: csv_writer = csv.writer(csv_file, delimiter=',') csv_writer.writerow(weekdays) csv_writer.writerow(sales)
Сначала нам нужно импортировать библиотеку csv
, чтобы получить их вспомогательные функции. Мы открываем файл, как мы привыкли, но вместо того, чтобы писать содержимое на объект csv_file
, мы создаем новый объект с именем csv_writer
.
Этот объект предоставляет нам метод writerow ()
, который позволяет нам поместить все данные строки в файл за один раз.
Если вы хотите узнать больше об использовании CSV-файлов в Python более подробно, вы можете прочитать больше здесь: Чтение и запись CSV-файлов в Python .
Сохранение файла JSON
JSON-это еще один популярный формат для хранения данных, и, как и в случае с Csv, Python очень просто записывает данные вашего словаря в файлы JSON:
import json my_details = { 'name': 'John Doe', 'age': 29 } with open('personal.json', 'w') as json_file: json.dump(my_details, json_file)
Нам действительно нужно импортировать библиотеку json
и открыть файл. Чтобы на самом деле записать данные в файл, мы просто вызываем функцию dump ()
, давая ей наш словарь данных и объект file.
Если вы хотите узнать больше об использовании файлов JSON в Python, вы можете узнать больше из этой статьи: Чтение и запись JSON в файл в Python .
Вывод
Сохранение файлов может пригодиться во многих программах, которые мы пишем. Чтобы написать файл на Python, нам сначала нужно открыть его и убедиться, что мы закроем его позже.
Лучше всего использовать ключевое слово with
, чтобы файлы автоматически закрывались, когда мы закончим писать в них.
Мы можем использовать метод write()
для помещения содержимого строки в файл или использовать writelines ()
, если у нас есть последовательность текста для помещения в файл.
Для данных CSV и JSON мы можем использовать специальные функции, предоставляемые Python для записи данных в файл после его открытия.