Лекция 17. Файлы. Строки. Форматный ввод-ввод. Сортировка в файлах (1152919), страница 2
Текст из файла (страница 2)
Различают файлы:с последовательным доступом – это файлы, в которых нельзяпрочитать очередную запись, не прочитав все предыдущие; к такимфайлам относятся текстовые файлы.с прямым доступом – это файлы, в которых можно перейти внужную позицию в файле и считывать записи с этой позиции; к такимфайлам относятся двоичные файлы.12.2. Строки и текстовые файлы.Так как работа с текстовым форматом тесно связана с символьнымтипом данных, которые в Python представлены типом «строка», приведемряд полезных функций и напомним основные операции над строками.Функции, операции и все возможные вариации параметров описать врамках лекции невозможно, поэтому дадим только обзор возможностей.8Воробьева И.А. «Информатика.
Язык Питон»Таблица 12.2.Базовые операцииназваниеКонкатенация (сложение)ДублированиеДлина строкиДоступ по индексу – в Pythonестьотрицательныеиндексы, нумерация ихначинаются с конца массивас номера «-1»Срез – это подмножествострокивыбранноепоправилу [START:STOP:STEP],где берётся срез от номераSTART, до STOP (не включаяего), с шагом STEP.Срез достаточно гибкаяконструкция,приведемтолько часть вариантов ееиспользования..пример работы в интерпретаторе Python>>> s1 = 'пара'>>> s2 = 'метр'>>> print(s1 + s2)'параметр'>>> print('MА' * 2)МАМА>>> len('Привет')6>>> S = 'Привет'>>> S[0]'П'>>> S[5]'т'>>> S[-1]'т'>>> S[-6]'П'>>> S = 'Привет'>>> S[3:5]'ве'>>> S[0:5:2]'Пие'>>> S[:3] # есть только STOP'При'>>> S[3:] # есть только START'вет'9Воробьева И.А.
«Информатика. Язык Питон»Таблица 12.3.Функции и методы строкназваниепример работыPythonПоиск подстроки s1 в строке S. >>> s = 'парапапа'Возвращает номер первого >>> s.find('па')вхождения или -1S.find(s1)0вПоиск подстроки s1 в строке S.
>>> s.rfind('па')Возвращает номер последнеговхождения или -1S. rfind(s1)6Замена шаблона>>> s.replace('па','м')S.replace(шаблон, замена)Разбиениестрокипоразделителю.Возвращаетмассив из строк.S.split(разделитель)'мрамм'>>> s = 'Привет. Я друг!'>>> s.split('р')['П', 'ивет. Я д', 'уг.']Если разделитель не указан, то >>> s.split('ру')разбиение строки происходитпо символу пробела.['Привет. Я д', 'г.']Сборка строки из списка. При >>>s = '..'этом соединителем элементов >>>s.join(['1', '2'])списка будет строка S'1..2'S.join(список)>>>s = ', '>>>s.join(['-10', '22'])'1, 2'Другие функции и методы строк# Состоит ли строка из цифрS.isdigit()интерпретаторе10Воробьева И.А. «Информатика.
Язык Питон»# Состоит ли строка из буквS.isalpha()# Состоит ли строка из символов в нижнем регистреS.islower()# Состоит ли строка из символов в верхнем регистреS.isupper()# Преобразование строки к верхнему региструS.upper()# Преобразование строки к нижнему региструS.lower()# Символ в его код ASCIIord(символ)# Код ASCII в символchr(число)# Первую букву каждого слова переводит в верхний регистр, а всеостальные в нижнийS.title()Функция str().Функция str() преобразует данные в строку подобно известным намфункциям приведения типов int(), float() и complex(). Для любого типаданных можно получить строковое представление.
Приведем пример.>>> str(1)'1'>>> colors = ['белый', 'красный', 'синий']>>> str(colors)"['белый', 'красный', 'синий' ]">>> Mas = (-1, 35, 0)>>> str(Mas)"(-1, 35, 0)"Вы, наверное, ожидали, что str() будет работать только с такимипростыми типами данных, как целые числа, так как почти каждый языксодержит функцию для преобразования целого числа в строку. Однако,str() работает и с объектами других типов. В данном случае мы получаемстроковое представление списка.11Воробьева И.А. «Информатика.
Язык Питон»Функции для работы с текстовым файлом.В языке Python не составляет труда считать содержимое текстовогофайла в строковые переменные, где затем это содержимое можно преобразовывать в другие типы данных, если потребуется.Для работы с файлом создается файловая переменная (файловыйобъект).
Также встречается понятие указатель в файле (дескрипторфайла) – указатель определяет текущую позицию в файле при считывании: начало файла, номер записи в середине файла, конец файла.Общий механизм взаимодействия с файлом следующий.Необходимо объявить файловую переменную, связать ее с именемконкретного файлом соответствующего типа, открыть файл в режимечтения или записи, произвести чтение или запись в необходимомколичестве, обязательно закрыть файл. Теперь изложим этот механизм суказанием конкретных функций для файлов текстового типа.Пусть мы хотим назвать файловую переменную fd (имя может бытьлюбое).Таблица 12.4.fd = open(‘имя текстового файла’, 'режим открытия')'r' - для чтения'w' – для записи (если файл существует, то будет очищен)'a' – для добавления записей в конец файла'r+' – для обновления (чтение и запись)По умолчанию выбирается режим текстовых файлов. Если надо открыть врежиме бинарных файлов, тогда добавляют ‘b’, например:'rb' - для чтения двоичного файла'r+b' – для обновления (чтение и запись) двоичного файла и т.д.Замечание.
Если файл и использующая его программа находятся в однойпапке на компьютере, тогда достаточно указать только имя файла. Еслиэто не так, тогда необходимо указывать полный путь к файлу.12Воробьева И.А. «Информатика. Язык Питон»Таблица 12.5.После использования файла его обязательно надо закрыть:fd.close().В этом случае в конец файла записываются специальные служебныесимволы, которые потом позволяют его корректно заново открывать.Например, в любом файле, после содержимого должен быть прописантак называемый «признак конца файла» -- EOF, на которыйориентируются большинство функций, работающих с файлами.Файловые объекты обеспечивают три метода чтения: read(), readline() иreadlines(). Каждый из этих методов может принимать аргумент для ограничения объема данных (количество байт), считываемых за один раз,однако в основном они используются без аргумента.read() считывает весь файл за один раз (если позволяет объемимеющейся оперативной памяти), и обычно используется для помещения содержимого файла в одну строковую переменную.
Он не очень удобен, когда нужно обрабатывать файл построчно.readline() и readlines() очень похожи. Различие между readline() иreadlines() в том, что readlines(), как и read(), считывает весь файл за одинраз, если позволяет размер ОП.readlines() автоматически разносит содержимое всех строк файла вмассив строк, который может быть обработан с помощью конструкцииязыка Python for ... in ....readline() считывает только одну строку за одно обращение к файлу, и в целом работает гораздо медленнее, чем readlines().Для записи в файл используется функция write().Приведем пример записи нового текста в файл и последующего считывания содержимого этого файла (двумя способами readline() и readlines(),чтобы показать разницу в работе с ними).13Воробьева И.А.
«Информатика. Язык Питон»Пример:Lyric = '''Тихо, словно бы во сне,Закружился в тишинеПервый снег и зашептал:— Как давно я не летал!(В. Ланцетти)'''line = ’’ # строковая переменная для построчного считывания# из файлаfd = open('Verse.txt', 'w')# открываем файл для записи (writing)fd.write(Lyric)# записываем текст в файлfd.close()# закрываем файл Verse.txtfd = open('Verse.txt', 'r') # открываем файл для чтения (reading)# хороший повод использовать цикл с постусловиемwhile True:line = fd.readline() # считываем в цикле построчно# все пять строк файлаif len(line) == 0: # Нулевая длина обозначает конец файла (EOF)break # обеспечим выход из цикла с постусловиемprint(line, end='')fd.close()# выводим на экран тоже построчно,# причем убираем лишний перевод# каретки, который делает функция# print(), так как он у нас итак есть# в конце каждой строки текста# закрываем файл# используем второй способ – считывание сразу всех строк в# массив : [ ['Тихо, словно бы во сне,\n], [Закружился в тишине\n], [Первыйснег и зашептал: \n], [— Как давно я не летал! \n], [(В.
Ланцетти) \n] ]fd = open('Verse.txt', 'r') # вновь открываем файл для чтенияfor line in fd.readlines():# переменная line пробегает# по всем значениям массива из строкprint (line, end='')fd.close()# закрываем файл14Воробьева И.А. «Информатика. Язык Питон»Вывод (дважды):Тихо, словно бы во сне,Закружился в тишинеПервый снег и зашептал:— Как давно я не летал!(В. Ланцетти)12.3. Форматный ввод и выводДовольно часто возникают ситуации, когда нужно сделать строку,подставив в неё некоторые данные, полученные в процессе выполненияпрограммы (пользовательский ввод или вывод, данные из файлов и т.
д.).Подстановку данных можно сделать с помощью метода форматированиястрок format(), который применяют к любой переменной или константестрокового типа.Метод format() – мощный инструмент форматирования строк иимеет достаточно много опций, которые нет смысла запоминать наизусть.Приведем наиболее часто используемые опции, а полный их списоквсегда можно посмотреть в справочниках при необходимости.Форматирование строк с помощью метода format1.
Если для подстановки требуется только один аргумент, тозначение - сам аргумент, значение будет вставлено в строку на местофигурных скобок:>>> 'Привет, {}!'.format('Вася')'Привет, Вася!'2. А если несколько, то значениями будут являться все аргументы состроками подстановки, причем можно указывать порядок подстановкиаргументов (идексация начинается с нуля):>>> '{0}, {1}, {2}'.format('a', 'b', 'c')'a, b, c'>>> '{2}, {1}, {0}'.format('a', 'b', 'c')'c, b, a'# в обратном порядке15Воробьева И.А. «Информатика. Язык Питон»>>> '{0}{1}{0}'.format('АБРА', 'КАД')'АБРАКАДАБРА'3. Можно использовать именование аргументов для подстановки:>>> 'Координаты: {W}, {L}'.format(W='37.24', L='-115.81')'Координаты: 37.24, -115.81'4.