Доброго времени суток, читатели, зрители моего канала programmer's notes.
Приложение 2 к видео
См. также приложение 1
Чтение из текстовых файлов
В приложении 1 к видео 3 был дан справочный материал по работе в основном с текстовыми файлами. Также рассматриваются некоторые примеры из видеоурока. Сегодняшняя статья дополняет видеоматериал.
Начнём с общей схемы открытия файла и работы с ним.
# открыть файл
f1 = open(...) # открыть файл
# читаем и пишем
...
# закрыть файл
f1.close()
Ну всё довольно просто, на первый взгляд
Но давайте вспомним, что такая вещь, как контекстный менеджер. Я об этом написал. Для класса работы с файлами он также реализован.
Т.е. можно написать, например так
Что здесь особенного? В строке with open('tmp', 'r') as f1: открывается файл. Также отсюда начинается блок обработки файла. Этот блок может быть сколь угодно длинным и пока он не закончился, файл остаётся открытым. Закрытие файла осуществляется автоматически по выходу из блока.
Некоторым кажется, что это хорошая практика использовать такие конструкции. Лично я не очень в этом уверен. Ну посудите сами. Иногда человек использует такую конструкцию и даже не знает, что файл нужно закрывать. Вообще все структуры, которые прячут от программиста определённые детали выполнения, конечно, могут ускорять процесс программирования, но плодят людей, которые глубоко предмета не знают. Опять же со мной многие не согласятся, поскольку они рассматривают программирование, как чисто прикладную дисциплину, имеющую отношение только к коммерческой разработке программного обеспечения. Но я уже привык, когда меня ругают за то, что я с этим не соглашаюсь.
Но продолжим. При открытии файла, а также при чтении-записи в него могут "выбрасываться" ошибки. И желательно, при работе с файлами отлавливать такие ошибки. Напомню, что на моём канале есть видеоурок и два приложения к нему: пр 1 и пр 2, как раз по отлавливанию ошибок. Ну, следовательно, вы вооружены и следующий текст будет вам понятен.
Поскольку ошибка может произойти и при открытии файла и при записи в файл, я разделил обработку ошибок: отдельно на открытие, отдельно на запись. В блоке, производится запись в файл, на самом деле, конечно, может быть много строк, как связанных с записью, так и с другими действиями. Так что представленная схема важна прежде всего тем, что мы отделяем обработку ошибок при открытии файла от других ошибок.
Ну и в заключении приведём пример создания текстового файла, содержащего в каждой строке число, делящееся на 3.
#!/usr/bin/python3
f1 = open('tmp', 'w')
ls = [str(t) + '\n' for t in range(1, 101) if t % 3 == 0]
f1.writelines(ls)
f1.close()
Удобная штука эта writelines(), не правда ли? Я упоминал об этом методе в Приложении 1.
Всего наилучшего. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.