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 и статьями о программировании, технологиях и инвестициях.