Обработка текстовых файлов: продолжение
Чтение содержимого текстового файла может быть выполнено несколькими различными способами - ни один из них не лучше и не хуже, чем любой другой. Вам решать, какой из них Вы предпочитаете.
Некоторые из них иногда будут удобнее, а некоторые не очень. Важно быть гибким. Не бойтесь менять свои предпочтения.
Самым основным из этих методов является тот, который предлагается функцией read()
, которую Вы могли увидеть в действии на предыдущем уроке.
Применительно к текстовому файлу функция может:
- прочитать желаемое количество символов (включая только один) из файла и вернуть их в виде строки;
- прочитать все содержимое файла и вернуть его в виде строки;
- если больше нечего читать (виртуальная считывающая головка достигает конца файла), функция возвращает пустую строку.
Мы начнем с самого простого варианта и используем файл с именем text.txt
. Файл имеет следующее содержимое:
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
text.txt
Теперь посмотрите на код в редакторе, и давайте проанализируем его.
Процедура довольно проста:
- используйте механизм try-except и откройте файл с заранее заданным именем (в нашем случае text.txt);
- попытайтесь прочитать самый первый символ из файла (
ch = s.read(1)
); - если Вы добились успеха (это подтверждается положительным результатом проверки условия
while
), выведите символ (обратите внимание на аргументend =
- это важно! Вы же не хотите переходить на новую строку после каждого символа "!"); - также не забудьте обновить счетчик (
cnt
); - попробуйте прочитать следующий символ и повторите процесс.
Code
from os import strerrortry:
cnt = 0
s = open('text.txt', "rt")
ch = s.read(1)
while ch != '':
print(ch, end='')
cnt += 1
ch = s.read(1)
s.close()
print("\n\nCharacters in file:", cnt)
except IOError as e:
print("I/O error occurred: ", strerr(e.errno))
{{ dockerServerErrorMsg }}
×
{{ errorMsg }}
×
{{ successMsg }}
×