Работа с файлами в Python
Загрузить данные в программу из файла, выгрузить данные в файл, записывать историю обращений к программе в специальный файл — всё это очень частые задачи.
Как открыть файл
Чтобы открыть файл, используется функция open()
:
my_file = open("myfile.txt", "r")
file_contents = my_file.read()
my_file.close()
В этом коде:
- Функция
open()
принимает на вход 2 аргумента: путь до файла и права, с которыми его открыть.r
— отread
, т.е. мы просим открыть файл в режиме чтения. - Функция
open()
возвращает не текст в файле, а сам файл. Файл как бы теперь открыт, как если вы бы щёлкнули по нему дважды левой клавишей. - Метод файла
.read()
позволяет читать данные из файла. Строка с содержимым файла запишется в переменнуюfile_contents
. - Метод
.close
закрывает файл.
Как сделать правильно
Закрывать файлы важно по двум причинам:
- Чтобы читать и писать в один и тот же файл из разных мест программы.
- Чтобы не превысить лимиты операционной системы. У неё есть ограничение на число одновременно открытых файлов. Ограничение легко превысить, если открывать файлы в цикле.
Однажды вы точно забудете закрыть файл. В Python есть специальная команда на такой случай — with
:
with open("myfile.txt", "r") as my_file:
file_contents = my_file.read()
print(file_contents)
Выглядит немного непривычно, но суть простая: всё, что лежит “внутри” блока with
(т.е. с отступом от него) — делается с открытым файлом. Как только файл не нужен, вы убираете отступ и файл сам закроется.
Открыть файл в папке
Допустим, рядом c вашим файлом main.py
, из которого вы запускаете код, лежит папка files
. В этой папке лежит файл file.txt
:
.
├── files
│ └── file.txt
└── main.py
Вам очень нужно открыть файл file.txt
, но он спрятался в папке, что же делать? Вот как его открыть:
with open("files/file.txt", "r") as my_file:
file_contents = my_file.read()
print(file_contents)
Ошибки кодировки
Бывает, что вы знаете, что файл в порядке, но Python читает его со странными символами: ������. Дело в кодировках: одни программы пользуют CP1251, другие ASCII, третьи UTF-8. К сожалению, программистам до сих пор не получилось окончательно перейти к какому-то одному варианту.
Чтобы открыть файл с нужной кодировкой, нужно передать функции open
именованный аргумент encoding
:
with open("myfile.txt", "r", encoding="ваша кодировка") as my_file:
# ...
Если вы не знаете кодировку вашего файла, на Хабре есть интересная статья с такой схемой:
Запись в файл
Для записи в файл нужно лишь указать режим w
(write) и использовать не .read()
, а .write()
:
my_text = "Хочу записать эту строку в файл"
with open("myfile.txt", "w") as my_file:
my_file.write(my_text)
Альтернативные статьи
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.