Python - очень удобный инструмент для работы с файлами. При правильном использовании это сэкономит вам много времени.
Прочитать файл
Мы используем метод open()
для открытия файла, а второй параметр определяет, в какой режим мы войдем после его открытия:
f = open('test_file.txt', 'r')
Значение по умолчанию второго параметра - «r», что соответствует режиму «чтения» для чтения текстовых файлов. Для чтения двоичных файлов мы используем «rb».
Если файл не существует, появится FileNotFoundError
.
После использования файл необходимо закрыть, поскольку файловый объект будет занимать ресурсы операционной системы, а количество файлов, которые операционная система может открывать одновременно, также ограничено.
f.close()
Однако иногда мы могли забыть закрыть файл после использования, что могло вызвать непредвиденные ошибки. Следовательно, мы можем использовать try
:
Но код выглядит немного суетливым, если мы всегда делаем это при открытии файла. На самом деле, лучший способ открыть файл в Python - использовать with
:
Функция open()
возвращает файловый объект. Файловый объект Python имеет 3 метода чтения, что дает нам достаточную гибкость для получения содержимого:
read()
: прочитать весь файл и сохранить его содержимое в строковую переменную Python. Иногда размер файла превышает доступную память. В целях безопасности мы можем использовать параметр n для чтения n символов каждый раз:read(n)
. По умолчанию значение n равно -1, что означает чтение всего файла.readlines()
также предназначен для чтения всего файла, но он автоматически анализирует содержимое файла и преобразует его в список строк, что упрощает работу с содержимым в виде списка строк.readline()
читает каждый раз только одну строку содержимого файла.
Настоящий вопрос на собеседовании, который я встретил об обработке файлов в Python:
Есть два файла, каждый из которых содержит множество строк IP-адресов. Найдите один и тот же IP-адрес в обоих файлах.
Четыре пункта в этом решении:
- Используйте
with
для открытия файлов. - Используйте
rstrip()
, чтобы удалить "\ n". - Бинарный поиск более эффективен, чем решение методом перебора.
- Используйте
set
, чтобы удалить повторяющиеся IP-адреса.
Записать в файл
Режим «w» представляет «запись»: если такого файла нет, будет создан новый файл; если есть, то содержимое исходного файла будет очищено перед записью новых вещей. Поэтому, если вы не хотите очищать исходное содержимое, но собираетесь добавить новое содержимое в конец файла, используйте режим «a».
Когда мы записываем файлы, операционная система часто не сразу записывает данные на диск, а помещает их в кэш памяти. Только при вызове метода close()
операционная система гарантирует, что все незаписанные данные будут записаны на диск. Последствием того, что вы забыли вызвать close()
, является то, что только часть данных может быть записана на диск, а остальные будут потеряны. Поэтому также рекомендуется использовать оператор with
.
Файловый объект Python имеет 2 метода записи:
write()
: записать строку в файлwritelines()
: получить параметр списка и записать каждую строку в списке в файл. (Совет: мы должны добавить\n
вручную)
Перемещение указателя в файле
Файловый объект имеет метод seek(offset,whence = 0)
, который используется для перемещения указателя файла в файле. offset
указывает на величину смещения. Необязательный параметр whence указывает, где начинать смещение. Значение по умолчанию - 0 для начала файла, 1 для текущей позиции и 2 для конца файла. Давайте посмотрим на пример:
Проблемы с кодировкой символов
Чтобы читать текстовые файлы в кодировке, отличной от UTF-8, вам необходимо передать параметр кодировки в функцию open()
, например, для чтения файлов в кодировке GBK:
f = open('test.txt', 'r', encoding='gbk', errors='ignore')
Иногда вы можете столкнуться с UnicodeDecodeError
, потому что некоторые незаконно закодированные символы могут быть смешаны в текстовом файле. В этом случае функция open () также получает параметр ошибок, который указывает, что делать, если обнаружена ошибка кодирования:
- Если
errors
присвоено значение «строгое»,ValueError
будет возбуждено исключение, если есть ошибка кодирования. (значение по умолчаниюNone
, что имеет тот же эффект). - Если
errors
присвоено значение «игнорировать», мы игнорируем ошибки кодировки в файле, но это может привести к потере данных.
Спасибо за внимание. Если вам это нравится, следите за моей публикацией TechToFreedom, где вы можете ознакомиться с другими учебными пособиями по Python и статьями о программировании, технологиях и инвестициях.