Сохранение данных в файл - одна из самых распространенных задач программирования, с которыми вы можете столкнуться в жизни разработчика.
Как правило, программы принимают некоторый ввод и производят некоторый вывод. Есть множество случаев, в которых мы хотели бы сохранить эти результаты. Мы можем обнаружить, что сохраняем данные в файл для последующей обработки - из просматриваемых нами веб-страниц, простых дампов табличных данных, которые мы используем для отчетов, машинного обучения и обучения или ведения журнала во время выполнения приложения - мы полагаемся на приложения, которые записывают в файлы, а не делают это вручную.
Python позволяет нам сохранять файлы различных типов без использования сторонних библиотек. В этой статье мы погрузимся в сохранение наиболее распространенных форматов файлов в Python.
Открытие и закрытие файла
Открытие файла
К содержимому файла можно получить доступ, когда он открыт, и он больше не доступен для чтения и записи после закрытия.
Открыть файл в Python просто:
my_data_file = open('data.txt', 'w')
При открытии файла вам понадобится имя файла - строка, которая может быть относительным или абсолютным путем. Второй аргумент - это режим, он определяет действия, которые вы можете делать с открытым файлом.
Вот некоторые из наиболее часто используемых:
r
- (режим по умолчанию) открыть файл для чтенияw
- открыть файл для записи, перезаписав содержимое, если файл уже существует с даннымиx
- создает новый файл, сбой, если он существуетa
- открыть файл для записи, добавив новые данные в конец содержимого файла, если он уже существуетb
- записывать двоичные данные в файлы вместо текстовых данных по умолчанию+
- разрешить чтение и запись в режим
Допустим, вы хотите записать в файл, а затем прочитать его, ваш режим должен быть 'w +'. Если вы хотите записать, а затем прочитать из файла, не удаляя предыдущее содержимое, вы будете использовать «a +».
Закрытие файла
В Python закрыть файл еще проще:
my_data_file.close()
Вам просто нужно вызвать метод close для файлового объекта. Важно закрыть файл после того, как вы закончите его использовать, и для этого есть много веских причин:
- Открытые файлы занимают место в ОЗУ
- Снижает вероятность повреждения данных, поскольку они больше не доступны
- Ваша ОС может открывать не все файлы.
Для небольших скриптов это не является насущной проблемой, и некоторые реализации Python фактически автоматически закрывают файлы для вас, но для больших программ не оставляйте закрытие файлов на волю случая и убедитесь, что вы освободили используемые ресурсы.
Использование ключевого слова "с"
О закрытии файла легко забыть, ведь мы же люди. К счастью для нас, в 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
Как только этот блок кода будет
завершен, файл будет автоматически закрыт.
Это рекомендуемый способ открытия и записи в файл, поскольку вам не нужно закрывать его вручную, чтобы освободить ресурсы, и он предлагает надежный механизм, позволяющий сосредоточить внимание на более важных аспектах программирования.
Сохранение текстового файла
Теперь, когда мы знаем лучший способ доступа к файлу, приступим непосредственно к записи данных.
К счастью, 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)
Примечание . Входные данные writelines()
должны быть плоской
последовательностью строк или байтов - числа, объекты или вложенные
последовательности, такие как список в списке, не допускаются.
Если вам интересно узнать больше о списках и кортежах, у нас уже есть посвященная им статья - Списки против кортежей в 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()
, передавая ей наш словарь
данных и объект файла.
Если вы хотите узнать больше об использовании файлов JSON в Python, вы можете больше узнать из этой статьи: Чтение и запись JSON в файл в Python .
Заключение
Сохранение файлов может пригодиться во многих программах, которые мы пишем. Чтобы написать файл на Python, нам сначала нужно открыть файл, а потом обязательно закрыть его.
Лучше всего использовать with
чтобы файлы автоматически закрывались,
когда мы заканчиваем писать в них.
Мы можем использовать метод write()
чтобы поместить содержимое строки
в файл, или использоватьwritelines writelines()
если у нас есть
последовательность текста для помещения в файл.
Для данных CSV и JSON мы можем использовать специальные функции, которые предоставляет Python для записи данных в файл после его открытия.