книга заданий пайтон. книга практических заданий, pyton. Сборник упражнений Введение в язык Python с задачами и решениями Бен Стивенсон Москва, 2021 удк 004. 438Python
Скачать 2.24 Mb.
|
7.2. чтение из файлаСуществуют разные методы для чтения данных из открытого ранее файла. Все они могут применяться только при условии, что файл открыт в режиме чтения. Попытка прочитать данные из файла, который открыт на запись или добавление, приведет к возникновению ошибки. Метод readline позволяет считать одну строку из открытого файла и вернуть ее в качестве строкового значения – подобно тому, как функция input считывает пользовательский ввод с клавиатуры. Каждый очередной вызов метода readline будет возвращать следующую строку из файла. При достижении конца файла метод вернет пустую строку. Представьте, что у вас есть файл, в котором на каждой строке располагаются числа. В следующем фрагменте кода мы подсчитаем их сумму. # Запрашиваем у пользователя имя файла и открываем его fname = input("Введите имя файла: ") inf = open(fname, "r") # Инициализируем сумму total = 0 # Подсчитываем сумму line = inf.readline() while line != "": total = total + float(line) line = inf.readline() # Закрываем файл inf.close() # Отображаем результат print("Сумма значений в файле", fname, "равна", total) В начале программы мы запрашиваем у пользователя имя файла, который необходимо открыть. После этого указанный файл открывается в режиме чтения, а ссылка на него возвращается в переменную inf. Затем инициализируем общую сумму нулем и считываем первую строку из файла. В цикле while указано условное выражение, пропускающее в тело цикла только в случае, если считанная строка не является пустой. В самом теле считанная из файла строка преобразуется в число с плавающей запятой и добавляется к общей сумме. После этого из файла считывается следующая строка, и управление снова передается условному выражению цикла. По достижении конца файла метод readline вернет пустую строку, которая будет сохранена в переменной line. Это приведет к тому, что условное выражение вернет значение False, и цикл завершится. После закрытия файла на экран выводится общая сумма. Иногда бывает полезно считать все данные из файла за один заход, а не построчно. Это можно сделать при помощи методов read и readlines. При этом метод read возвращает все содержимое файла как одну длинную строку, которую при дальнейшей обработке приходится вручную разбивать на составляющие элементы. Метод readlines, в свою очередь, возвращает содержимое файла в виде списка строк. После завершения чтения можно пройти по созданному списку при помощи цикла и на каждой итерации извлекать по одной строке. В следующем фрагменте кода демонстрируется метод readlines для подсчета суммы значений из исходного файла. Здесь происходит полное считывание содержимого файла вместо получения каждой отдельной строки в цикле. # Запрашиваем у пользователя имя файла и открываем его fname = input("Введите имя файла: ") inf = open(fname, "r") # Инициализируем сумму total = 0 lines = inf.readlines() # Подсчитываем сумму for line in lines: total = total + float(line) # Закрываем файл inf.close() # Отображаем результат print("Сумма значений в файле", fname, "равна", total) 7.3. символы конца строкиВ следующем примере метод readline используется для последовательного вывода всех строк из файла. Каждой строке будет предшествовать ее порядковый номер и двоеточие. # Запрашиваем у пользователя имя файла и открываем его fname = input("Введите имя файла для отображения: ") inf = open(fname, "r") # Инициализируем порядковый номер строки num = 1 # Отображаем строки из файла, предваряя их порядковыми номерами line = inf.readline() while line != "": print("%d: %s" % (i, line)) # Увеличиваем номер строки и считываем следующую строку num = num + 1 line = inf.readline() # Закрываем файл inf.close() При запуске данной программы вы будете удивлены тем, что она выведет – после каждой строки будет следовать еще одна строка, пустая. Причина этого в том, что каждая строка в текстовом файле оканчивается одним или несколькими символами конца строки. Примечание. Символы конца строки и их количество отличаются в разных операционных системах. К счастью, в Python существует автоматическая поддержка этих различий, и текстовый файл, созданный в любой операционной системе, может быть корректно прочитан в Python. Символы конца строки необходимы для того, чтобы любая программа, считывающая файл, могла без труда определить, где заканчивается одна строка и начинается другая. Если бы не эти символы, при любом считывании данных все содержимое файла оказывалось бы в вашей переменной, а при открытии файла в текстовом редакторе все строки были бы неразрывно связаны. Маркер окончания строки может быть удален после чтения из файла при помощи метода rstrip. Этот метод, который может быть применен к абсолютно любой строке, избавляет ее от всех примыкающих справа пробельных символов (whitespace character), в число которых входят пробел, символ табуляции и маркеры конца строки. Метод возвращает копию исходной строки без этих специальных символов в конце строки. Обновленный фрагмент кода программы представлен ниже. Здесь используется метод rstrip для удаления символов конца строки, что позволило избавиться от пустых строк при выводе содержимого файла на экран. # Запрашиваем у пользователя имя файла и открываем его fname = input("Введите имя файла для отображения: ") inf = open(fname, "r") # Инициализируем порядковый номер строки num = 1 # Отображаем строки из файла, предваряя их порядковыми номерами line = inf.readline() while line != "": # Удаляем символы конца строки и отображаем строку на экране line = line.rstrip() print("%d: %s" % (i, line)) # Увеличиваем номер строки и считываем следующую строку num = num + 1 line = inf.readline() # Закрываем файл inf.close() |