Module (32%)
Section (11%)

Обработка текстовых файлов: продолжение

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

Некоторые из них иногда будут удобнее, а некоторые не очень. Важно быть гибким. Не бойтесь менять свои предпочтения.

Самым основным из этих методов является тот, который предлагается функцией 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 strerror

try:
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 }} ×