На этом шаге мы прочитаем данные из файла и сохраним результат в виде списка строковых значений (по одному на строку). Мы также удалим из прочитанных строк все ведущие и хвостовые пробельные символы.
В Python чтение файла не представляет трудности, но требует обычно нескольких строк кода (и кое-какого поиска в Google). Ниже представлен один из стандартных способов чтения данных из файла в языке Python:
filename = "pr22_1.py" # этот код f = open(filename) lines = [] for line in f: lines.append(line.strip()) print(lines)
Предполагается, что этот фрагмент кода сохранен в файле pr22_1.py в текущем каталоге. Код открывает данный файл, создает пустой список, lines, и заполняет его строковыми значениями с помощью метода append() в теле цикла for, в котором проходит по всем строкам файла. Мы также воспользовались строковым методом strip() для удаления всех ведущих и хвостовых пробельных символов (в противном случае в строках бы оказались и символы новой строки '\n').
Для доступа к файлам на компьютере необходимо знать, как их открывать и закрывать. Получить доступ к файлу данных можно только после его открытия. Если файл был закрыт, значит, все данные уже в него записаны. Python может создавать буфер и ожидать некоторое время, пока не запишет весь буфер в файл (рисунок 1).
Рис.1. Открытие и закрытие файла на языке Python
Причина этого проста: доступ к файлам осуществляется довольно медленно. Из соображений эффективности Python не записывает биты по отдельности, а ждет, пока буфер наполнится достаточным количеством байтов, после чего сбрасывает весь буфер в файл целиком.
Именно поэтому рекомендуется с помощью метода f.close() закрывать файл после записи в него данных, чтобы гарантировать, что все данные записаны
должным образом, а не остались во временной памяти. Однако существует несколько исключений, когда Python закрывает файл автоматически, в
частности, когда счетчик ссылок уменьшается до нуля, как вы увидите в следующем коде.
Наша задача: открыть файл, прочитать все строки, удалить ведущие и хвостовые пробельные символы и сохранить результаты в списке. Соответствующий однострочник приведен в примере 2.3.
print([line.strip() for line in open("pr22_2.py")])
Попробуйте догадаться, какие результаты будут выведены при выполнении этого фрагмента кода, прежде чем читать следующий подраздел.
Для вывода полученного списка в командную оболочку мы применили оператор print(). Этот список был создан с помощью спискового включения (см. шаг 20 "Поиск самых высокооплачиваемых работников с помощью спискового включения"). В части выражение спискового включения используется метод strip() строковых объектов.
Контекст спискового включения проходит в цикле по всем строкам файла.
В результате выполнения этого однострочника будет выведен просто он сам (поскольку он предназначен для чтения своего файла исходного кода на Python - pr22_1.py), обернутый в строковый объект и вставленный в список:
print([line.strip() for line in open("pr22_2.py")]) # ['print([line.strip() for line in open("pr22_2.py")])']
Этот шаг демонстрирует, что повышение лаконичности кода делает его более удобочитаемым, не нанося какого-либо ущерба эффективности.
На следующем шаге мы рассмотрим лямбда-функции и функцию map().