Чтение текстового файла в Python
В этом уроке вы узнаете различные способы чтения текстовых файлов на Python.
- TL;DR
- Пошаговое руководство по чтению текстового файла в Python
- 1) Функция open()
- 2) Методы чтения текста
- 3) Метод close()
- Чтение примеров текстового файла
- Более краткий способ чтения текстового файла построчно
- Чтение текстовых файлов UTF-8
- Заключение
TL;DR
Ниже показано, как считать все тексты из файла readme.txt в строку:
with open('readme.txt') as f: lines = f.readlines()
Пошаговое руководство по чтению текстового файла в Python
Чтобы прочитать текстовый файл в Python, выполните следующие действия:
- Сначала откройте текстовый файл для чтения с помощью функции open().
- Во-вторых, прочитайте текст из текстового файла, используя метод read(), readline() или readlines() файлового объекта.
- В-третьих, закройте файл, используя метод close().
1) Функция open()
Функция open() имеет много параметров, но вы сосредоточитесь на первых двух:
open(path_to_file, mode)
- Параметр path_to_file указывает путь к текстовому файлу.
Если программа и файл находятся в одной папке, вам нужно указать только имя файла. В противном случае вам необходимо указать путь к файлу, а также имя файла.
Чтобы указать путь к файлу, используйте косую черту(«/»), даже если вы работаете в Windows. Например, если файл readme.txt хранится в папке с образцами как программа, то путь к файлу необходимо указать как c:/sample/readme.txt.
- mode является необязательным параметром. Это строка, определяющая режим, в котором вы хотите открыть файл. В следующей таблице показаны доступные режимы открытия текстового файла:
Режим | Описание |
---|---|
‘r’ | Открыть текстовый файл для чтения текста. |
‘w’ | Открыть файл для написания текста. |
‘a’ | Для добавления текста. |
Например, чтобы открыть файл с именем the-zen-of-python.txt, хранящийся в той же папке, что и программа, вы используете следующий код:
f = open('the-zen-of-python.txt','r')
Функция open() возвращает файловый объект, который вы будете использовать для чтения текста из текстового файла.
2) Методы чтения текста
Объект файла предоставляет вам три метода чтения текста из текстового файла:
- read(size) – прочитать некоторое содержимое файла на основе необязательного размера и вернуть содержимое в виде строки. Если вы опустите размер, метод read() будет читать с того места, где он остановился, до конца файла. Если достигнут конец файла, метод read() возвращает пустую строку.
- readline() – прочитать одну строку из текстового файла и вернуть ее в виде строки. Если достигнут конец файла, функция readline() возвращает пустую строку.
- readlines() — прочитать все строки текстового файла в список строк. Этот метод полезен, если у вас небольшой файл и вы хотите манипулировать всем текстом этого файла.
3) Метод close()
Файл, который вы читаете, останется открытым, пока вы не закроете его с помощью метода close().
Важно закрыть файл, который больше не используется по следующим причинам:
- Во-первых, когда вы открываете файл в своем сценарии, файловая система обычно блокирует его, поэтому никакие другие программы или сценарии не смогут использовать его, пока вы его не закроете.
- Во-вторых, ваша файловая система имеет ограниченное количество файловых дескрипторов, которые вы можете создать до того, как они закончатся. Хотя это число может быть большим, можно открыть много файлов и истощить ресурсы файловой системы.
- В-третьих, если оставить много файлов открытыми, это может привести к состояниям гонки, которые возникают, когда несколько процессов пытаются одновременно изменить один файл, и могут вызвать самые разные непредвиденные действия.
Ниже показано, как вызвать метод close() для закрытия файла:
f.close()
Чтобы закрыть файл автоматически без вызова метода close(), используйте оператор with следующим образом:
with open(path_to_file) as f: contents = f.readlines()
На практике вы будете использовать оператор with для автоматического закрытия файла.
Чтение примеров текстового файла
Для демонстрации мы будем использовать файл -zen-of-python.txt.
В следующем примере показано, как использовать метод read() для чтения всего содержимого файла the-zen-of-python.txt:
with open('the-zen-of-python.txt') as f: contents = f.read() print(contents)
Выход:
Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. ...
В следующем примере метод readlines() используется для чтения текстового файла и возвращает содержимое файла в виде списка строк:
with open('the-zen-of-python.txt') as f: [print(line) for line in f.readlines()]
Выход:
Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. ...
Причина, по которой вы видите пустую строку после каждой строки файла, заключается в том, что каждая строка текстового файла имеет символ новой строки(\n). Чтобы удалить пустую строку, вы можете использовать метод Strip(). Например:
with open('the-zen-of-python.txt') as f: [print(line.strip()) for line in f.readlines()]
В следующем примере показано, как использовать readline() для чтения текстового файла построчно:
with open('the-zen-of-python.txt') as f: while True: line = f.readline() if not line: break print(line.strip())
Выход:
Explicit is better than implicit. Complex is better than complicated. Flat is better than nested. ...
Более краткий способ чтения текстового файла построчно
Функция open() возвращает файловый объект, который является итерируемым объектом. Таким образом, вы можете использовать цикл for для перебора строк текстового файла следующим образом:
with open('the-zen-of-python.txt') as f: for line in f: print(line.strip())
Это более краткий способ чтения текстового файла построчно.
Чтение текстовых файлов UTF-8
Код в предыдущих примерах отлично работает с текстовыми файлами ASCII. Однако если вы имеете дело с другими языками, такими как японский, китайский и корейский, текстовый файл не является простым текстовым файлом ASCII. И, скорее всего, это файл UTF-8, который использует не только стандартные текстовые символы ASCII.
Чтобы открыть текстовый файл UTF-8, вам необходимо передать кодировку = ‘utf-8’ в функцию open(), чтобы дать ей указание ожидать от файла символов UTF-8.
Для демонстрации вы будете использовать следующий файл quotes.txt, содержащий несколько цитат на японском языке.
Ниже показано, как просмотреть файл quotes.txt:
with open('quotes.txt', encoding='utf8') as f: for line in f: print(line.strip())
Выход:
Заключение
- Используйте функцию open() в режиме «r», чтобы открыть текстовый файл для чтения.
- Применяйте методы read(), readline() или readlines() для чтения текстового файла.
- Всегда закрывайте файл после завершения его чтения с помощью метода close() или оператора with.
- Используйте кодировку = ‘utf-8’ для чтения текстового файла UTF-8.