2.1 Чтение всего файла
В Python несколько способов чтения текстовых файлов. Каждый из этих методов имеет свои преимущества и подходит для различных ситуаций. Основные способы чтения текстовых файлов: чтение всего содержимого, чтение построчно, чтение с указанием количества символов и другие.
Метод read() считывает всё содержимое файла в одну строку.
file = open('example.txt', 'r')
content = file.read()
print(content)
file.close()
Это очень простой способ чтения файла — один вызов метода, и всё содержимое файла у вас в строке. В таком подходе есть и минусы — если файл содержит, например, 200 Мб логов, то он будет читаться медленно, а память вашего приложения будет быстро расходоваться.
2.2 Чтение всех строк файла
Есть некая альтернатива методу read() — это метод readlines(). Он тоже читает в память сразу весь файл, но возвращает его не в виде одной большой строки, а в виде списка строк — каждая строка файла будет отдельной строкой списка.
Метод readlines() считывает все строки файла и возвращает их в виде списка строк.
file = open('example.txt', 'r')
lines = file.readlines()
for line in lines:
print(line.strip()) # strip() удаляет лишние пробелы и символы новой строки
file.close()
Такой подход может быть удобен, если вы заранее знаете, что вам нужно обрабатывать содержимое файла построчно. Из минусов — такой метод может потреблять много памяти для очень больших файлов, так как все строки загружаются в память.
2.3 Итерация по строкам файла
Объект file имеет встроенный итератор, поэтому можно пройтись по его содержимому с помощью цикла for. Это позволяет читать файл построчно, не загружая весь файл в память.
Пример:
file = open('example.txt', 'r')
for line in file:
print(line.strip())
file.close()
Этот метод более эффективен с точки зрения памяти для больших файлов, так как строки читаются по одной. Однако может быть сложнее для обработки, если нужно вернуться к предыдущей строке или изменить порядок чтения.
Давайте ещё раз сравним этот подход и предыдущий:
| Использование итератора | Использование функции readlines() |
|---|---|
|
|
Такой способ проще и быстрее. Однако когда вы будете работать с реальными проектами, иногда будет быстрее загрузить все данные сразу в память и работать с ними уже там.
Методы readline() и readlines() используются для чтения строк из файла, но работают они по-разному. readline() считывает одну строку за раз, что позволяет контролировать процесс чтения и не загружать весь файл в память. Это удобно, когда нужно обрабатывать файл построчно или когда файл слишком велик для полной загрузки в память.
readlines(), напротив, считывает все строки файла сразу и возвращает их в виде списка. Этот метод удобен, если нужно быстро получить все строки файла для дальнейшей обработки. Однако он потребляет больше памяти, особенно для больших файлов, поскольку весь файл загружается в память целиком.
В зависимости от задачи readline() может быть предпочтительнее, если важна экономия памяти и контроль над процессом чтения, а readlines() удобен, когда требуется сразу получить все строки файла для обработки.
2.4 Чтение части файла
Если файл слишком большой, вы можете читать его по частям. В метод read(n) можно передать параметр n — количество символов, которое нужно прочитать. Если в файле символов меньше, чем n, то метод read() просто прочитает файл до конца.
Пример:
file = open('example.txt', 'r')
content = file.read(10) # Читает первые 10 символов
print(content)
file.close()
Это удобно для чтения больших файлов частями или для обработки фиксированных блоков данных. Но такой подход игнорирует разбиение файла по строкам — строки могут разрываться в середине.
2.5 Чтение файла построчно
Если по каким-либо причинам вы не хотите использовать итератор, то можете читать файл построчно вручную. Для этого у объекта file есть метод readline(). Не путать с readlines().
Метод readline() считывает одну строку из файла за раз.
Пример:
file = open('example.txt', 'r')
line = file.readline()
while line:
print(line.strip())
line = file.readline()
file.close()
В этом примере мы читаем содержимое файла построчно, пока прочитанная строка не будет пустой.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ