Главная страница

книга заданий пайтон. книга практических заданий, pyton. Сборник упражнений Введение в язык Python с задачами и решениями Бен Стивенсон Москва, 2021 удк 004. 438Python


Скачать 2.24 Mb.
НазваниеСборник упражнений Введение в язык Python с задачами и решениями Бен Стивенсон Москва, 2021 удк 004. 438Python
Анкоркнига заданий пайтон
Дата02.10.2022
Размер2.24 Mb.
Формат файлаdocx
Имя файлакнига практических заданий, pyton.docx
ТипСборник упражнений
#709959
страница37 из 69
1   ...   33   34   35   36   37   38   39   40   ...   69

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()
1   ...   33   34   35   36   37   38   39   40   ...   69


написать администратору сайта