Module (35%)
Section (28%)

Обработка текстовых файлов: readlines()

Другой метод, который обрабатывает текстовый файл как набор строк, а не символов - это readlines().

Метод readlines() при вызове без аргументов пытается считать все содержимое файла и возвращает список строк, по одному элементу на строку файла.

Если Вы не уверены, что размер файла достаточно мал и не хотите испытывать ОС, Вы можете убедить метод readlines() прочитать не более указанного числа байт сразу (возвращаемое значение остается прежним - это список строк).

Не стесняйтесь экспериментировать с примером кода для понимания того, как метод readlines()работает:

stream = open("text.txt") print(stream.readlines(20)) print(stream.readlines(20)) print(stream.readlines(20)) print(stream.readlines(20)) stream.close()

Максимально допустимый размер входного буфера передается методу в качестве аргумента.

Вы можете ожидать, что readlines() может обрабатывать содержимое файла более эффективно, чем readline(), так как это может требовать меньшего количества вызовов.

Примечание: когда нечего читать из файла, метод возвращает пустой список. Используйте его, чтобы определить конец файла.

Что касается размера буфера, Вы можете ожидать, что его увеличение может улучшить производительность ввода, но золотого правила для этого нет - попробуйте найти оптимальные значения самостоятельно.


Посмотрите на код в редакторе. Мы изменили его, чтобы показать Вам, как использовать readlines().

Мы решили использовать 15-байтовый буфер. Не думайте, что это рекомендация.

Мы использовали такое значение, чтобы избежать ситуации, когда первый вызов readlines() использует весь файл.

Мы хотим, чтобы метод мог работать усерднее и демонстрировал свои возможности.

В коде есть два вложенных цикла: внешний использует результат readlines() для его итерации, а внутренний печатает строки символов.



Code

from os import strerror

try:
character_counter = line_counter = 0
stream = open('text.txt', 'rt')
lines = stream.readlines(20)
while len(lines) != 0:
for line in lines:
line_counter += 1
for char in line:
print(char, end='')
character_counter += 1
lines = stream.readlines(10)
stream.close()
print("\n\nCharacters in file:", character_counter)
print("Lines in file: ", line_counter)
except IOError as e:
print("I/O error occurred:", strerror(e.errno))
{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×