Lecture #4 ФАЙЛЫ http://minak.ru Lecture #4 Что такое файл? Файл представляет собой набор данных, который хранится на носителе, таком как диск или флэш-накопитель. Файл имеет имя. Доступ к файлу означает установление соединения между файлом и программой для обмена данными. http://minak.ru Lecture #4 Файлы Текстовые Как правило, предназначены для чтения человеком Помимо алфавитно цифровых символов, используются управляющие символы, например, \n. http://minak.ru Бинарные Содержит не читаемую информацию. Обрабатываются программами. Lecture #4 Файловые объекты (потоки) При открытии файла создаеcя объект файла или файловый поток, который представляет собой соединение между программой и информацией в файле (на диске). http://minak.ru Lecture #4 Стандартный поток ввода-вывода Программа Устройства вывода Устройства ввода http://minak.ru Lecture #4 Файловый поток ввода-вывода Программа Файл ввода http://minak.ru Файл вывода Lecture #4 Буферизация Считывание с диска происходит очень медленно. Поэтому, данные из файла накапливаются в буфере (в объекте файла). Это означает, что объект файл содержит копию информации из файла (cash). http://minak.ru Lecture #4 Создание файлового объекта fileObject = open("my_file.txt", "r") http://minak.ru Lecture #4 Где находится файл? C:/WinPython34/notebooks/my_file.txt http://minak.ru Lecture #4 Закрытие потока fileObject.close() - закрывает обращения к файловому объекту. http://minak.ru Lecture #4 Режимы доступа к файлам Режим 'r' 'w' 'a' 'r+' 'w+' 'a+' http://minak.ru Ситуация при обращении к файлу файл существует нет файла только файл открывается, дискриптор в ошибка чтение начале файла содержимое файла удаляется, только дискриптор в начале файла создается новый файл, запись дискриптор устанавливается в дискриптор в начале файла конец содержания файла файл открывается, дискриптор в ошибка начале файла чтение и содержимое файла удаляется, запись дискриптор в начале файла создается новый файл, файл открывается, дискриптор в дискриптор в начале файла конце файла Доступ Lecture #4 Работа с текстовыми файлами При обращении к текстовому файлу, его содержимое является строкой . Считывая информацию или записывая информацию нужно учитывать, что производится работа со строкой . http://minak.ru Lecture #4 Методы чтения из файла fileObject.read() - считывает все содержимое файла в виде строки и возвращает его. fileObject.read(N) - может иметь необязательный параметр, целое число, чтобы ограничить чтение до N байт. fileObject.readline() - считывает строку из файла http://minak.ru Lecture #4 Файл input.txt Первая строка Вторая строка Третья строка Пример чтения всего файла >>> file_in = open ("input.txt", 'r') >>> text = file_in.read() >>> file_in.close() >>> print(text) Первая строка Вторая строка Третья строка http://minak.ru Lecture #4 Файл input.txt Первая строка Вторая строка Третья строка Пример чтения части файла >>> file_in = open ("input.txt", 'r') >>> text = file_in.read(5) >>> file_in.close() >>> print(text) Перва http://minak.ru Lecture #4 Файл input.txt Первая строка Вторая строка Третья строка Пример чтения строки из файла >>> file_in = open ("input.txt", 'r') >>> text = file_in.readline() >>> file_in.close() >>> print(text) Первая строка >>> http://minak.ru Lecture #4 Чтение строк из файла с помощью итератора for line in fileObject: print(line) http://minak.ru Lecture #4 Файл input.txt Пример чтения файла Первая строка Вторая строка Третья строка по строкам >>> file_in = open ("input.txt", 'r') >>> for line in file_in: print(line) Первая строка Вторая строка Третья строка >>> file_in.close() http://minak.ru Lecture #4 Чтение списка строк из файла fileObject.readlines() - возвращает список всех строк из файла http://minak.ru Lecture #4 Файл input.txt Первая строка Вторая строка Третья строка Пример чтения файла в список строк >>> file_in = open ("input.txt", 'r') >>> list_of_text = file_in.readlines() >>> file_in.close() >>> print(list_of_text[2]) Третья строка http://minak.ru Lecture #4 Запись данных в файл >>> >>> >>> >>> http://minak.ru file_out = open("output.txt",'w') print('Первая строка', file = file_out) print('Вторая строка\nТретья строка', file = file_out) file_out.close() Lecture #4 Еще один способ записи данных в файл >>> >>> >>> 28 >>> http://minak.ru text = 'Первая строка\nВторая строка\n' file_out = open("output.txt",'w') file_out.write(text) file_out.close() Lecture #4 Каков результат работы программы? input_file = open ('input.txt','r') output_file = open ('output.txt','w') for line_str in input_file: new_str = '' line_str = line_str.strip() for char in line_str: new_str = char + new_str print(new_str, file = output_file) print('Строка {:20s} преобразована в строку {:20s}'.format(line_str,new_str)) input_file.close() output_file.close() http://minak.ru Lecture #4 ИСКЛЮЧЕНИЯ http://minak.ru Lecture #4 Какие бывают исключения? http://minak.ru Ошибки События Например, неверное обращение к элементу списка по индексу, попытка открыть несуществующий файл и т.д. Например, алгоритм поиска не находит значение, получено сообщение по электронной почте и т.д. Lecture #4 Названия ошибок >>> input_file = open ('noname.txt','r') Traceback (most recent call last): File "<pyshell#42>", line 1, in <module> input_file = open ('noname.txt','r') FileNotFoundError: [Errno 2] No such file or directory: 'noname.txt' >>> my_int = int('a string') Traceback (most recent call last): File "<pyshell#43>", line 1, in <module> my_int = int('a string') ValueError: invalid literal for int() with base 10: 'a string' http://minak.ru Lecture #4 Основная идея • "Отлавливать" исключения там, где это ожидается в прогамме. • Если мы получим исключительную ситуацию, попытаемся ее определить. • "Обрабатываем" исключительную ситуацию. • Если нам не удается обработать исключение, пусть с этим справляется Python (который обычно останавливает программу). http://minak.ru Lecture #4 Все операции ввода - зло до тех пор, пока не доказано обратное. Ховард М., Лебланк Д. http://minak.ru Lecture #4 Конструкция try - except try: <инструкция, которая может пораждать ошибки> except <название ошибки>: <обработка исключения> http://minak.ru Lecture #4 Пример обработки исключений file_str = input('Введите имя файла: ') find_line_str = input('Введите номер строки в файле: ') try: input_file = open (file_str,'r') find_line_int = int(find_line_str) line_count_int = 1 for line_str in input_file: if line_count_int == find_line_int: print('Строка {} файла {} содержит:\n{}'.format(find_line_int, file_str, line_str)) break line_count_int += 1 else: print('Строка {} в файле {} не найдена.'.format(find_line_int, file_str)) input_file.close() http://minak.ru Lecture #4 except FileNotFoundError: print('Файл {} не найден.'.format(file_str)) except ValueError: print('Введенное значение {} не является целым числом.'.format(find_line_str)) print('Исполнение программы завершено.') http://minak.ru Вложения 4­01.py 4­02.py