Существует несколько методов, которые могут быть вызваны для чтения открытого файла:
fp.read(size=-1)
:
Метод считывает из файла не более size
символов в текстовом режиме или size
байтов в бинарном режиме и возвращает результат в виде строки в текстовом режиме или байтового объекта в двоичном режиме. Размер size
является необязательным числовым аргументом. Если size
опущен или равен None
или -1
, все содержимое файла будет прочитано и возвращено. Если файл в два раза больше оперативной памяти вашей машины, то это уже ваша проблема. В противном случае считываются и возвращаются Если достигнут конец файла, fp.read()
вернет пустую строку (''
).
>>> with open('text.txt', 'r') as fp: ... # Чтение и печать всего файла ... print(fp.read())
fp.readline(size=-1)
:
Метод читает не более size
символов в строке за раз. Считывание продолжается до конца строки. Если аргумент опущен или равен None
или -1
, то читается вся строка (или остальная часть строки). Символ новой строки '\n'
остается в конце возвращаемой строки и опускается только в последней строке файла.
>>> with open('text.txt', 'r') as fp: ... # читаем и печатаем первые 5 символов строки ... print(fp.readline(5))
fp.readlines()
:
Метод читает файл целиком и возвращает их в виде списка.
>>> with open('text.txt', 'r') as fp: ... # Возвращает объект списка ... text_list = fp.readlines() ... >>> text_list # ['Строка №1', 'Строка №2', 'Строка №3', 'Строка №4', 'Строка №5']
Приведенный выше пример также можно выполнить с помощью функции list()
для создания списка из файлового объекта:
>>> with open('text.txt', 'r') as fp: ... # Возвращает объект списка ... text_list = list(fp) ... >>> text_list # ['Строка №1', 'Строка №2', 'Строка №3', 'Строка №4', 'Строка №5']
Обычно, что нужно делать при чтении файла, это читать из него по одной строке и каким-то образом ее обрабатывать. Вот пример того, как использовать метод fp.readline()
для выполнения чтения файла построчно:
>>> with open('text.txt', 'r') as fp: ... # Считывание и печать всего файла строка за строкой ... line = fp.readline() ... while line != '': ... print(line, end='') ... line = fp.readline()
Другой способ, которым можно перебирать каждую строку в файле, это использовать метод file.readlines()
файлового объекта. Помните, что этот метод возвращает список, где каждый элемент в списке представляет строку в файле:
>>> with open('text.txt', 'r') as fp: ... for line in fp.readlines(): ... print(line, end='')
Приведенные выше примеры могут быть упрощены путем перебора самого объекта file. Этот подход более быстрый и эффективный. Рекомендуется использовать именно его для чтения файлов:
>>> with open('text.txt', 'r') as fp: ... # Считывание и печать всего файла строка за строкой ... for line in fp: ... print(line, end='')
Примечание:
примеры содержат запись print(line, end=")
. end= "
предотвращает добавление дополнительной новой строки в печатаемый текст. Дополнительно смотрите описание функции print()
.