Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Язык программирования высокого уровня Python. Функции, структуры данных, дополнительные модули. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
6. Модуль OS для работы в файловой системе
7. listdir(Путь) – возвращает список объектов в указанном ка-
талоге
import os
print ("Обход директорий для заданного пути
(os.listdir)")
for d in os.listdir("c:"): print (d)
7. walk() – позволяет обойти дерево каталогов. В качестве значе­ния возвращает объект, из которого можно получить кортеж из трех эле­ментов: текущий каталог, список каталогов и список файлов.
Необязательный параметр topdown задает последовательность об­хода каталога. Если в качестве значения указано True, то последователь­ность обхода будет следующей: сначала в глубь каталога, затем в следу­ющий.
Формат функции:
walk(Начальный_каталог[,topdown=True][,onerror=None] [,followlinks=False])
Обычно метод walk используется в цикле for:
import os
print ("Полный обход вглубь заданного пути
(os.walk)")
for path, dirs, files in
os.walk('c:\\windows\\system32'):
print 'Path', path print 'Dirs', dirs print 'Files', files
8. rename(Старое_Имя, Новое_Имя) – переименование файла. Если файл отсутствует или новое имя файла уже существует, возбуждает­ся исключение.
41
6. Модуль OS для работы в файловой системе
import os
# переименование
os.rename("AAA\\file.txt", "AAA\\super_file.txt")
Функция listdir() возвращает список объектов в указанном ка­талоге. Проверить, на какой тип объекта ссылается элемент этого списка, можно с помощью следующих функций из модуля OS:
1. isdir(Объект) – возвращает True, если объект является ката-
логом.
import os.path
print "Проверка, указывает ли заданный путь на директорию"
print os.path.isdir('c:\\python26\\LICENSE.txt')
2. isfile() возвращает True, если объект является файлом.
import os.path
print "Проверка, указывает ли заданный путь на файл" print (os.path.isfile('c:\\python26\\LICENSE.txt'))
Преобразование пути к файлу или каталогу
При преобразовании пути в Windows следует учитывать, что слэш является специальным символом. Поэтому все специальные символы необходимо экранировать слэшем, либо использовать неформатирован­ные строки (r’C:\temp\new’)
Преобразовать путь к файлу или каталогу позволяют следующие функции из модуля os.path:
1. abspath(Относительный путь) – преобразует относитель­ный путь в абсолютный, учитывая местоположение текущего рабочего каталога.
import os.path print "Преобразуем относительный путь в абсолютный" print os.path.abspath(r'test.py')
42
6. Модуль OS для работы в файловой системе
print os.path.abspath('..') # на директорию выше от текущей
2. split(Путь) – возвращает кортэж из двух элементов: пути к ка-
талогу и названия файла.
import os.path print "Разделение заданного пути на путь к директории и имя файла"
dir_file_name = os.path.split(r'C:\temp\data.txt')
#Результат ('C:\temp’, data.txt)
или
import os.path print "Разделение заданного пути на путь к директории и имя файла"
dir_path, file_name = os.path.split(r'C:\temp\data.txt') print dir_path, file_name
3. join(Путь[, … , Путь]) – соединяет указанные элементы
пути.
import os.path print "Объединение пути и имени файла (с правильным разделителем в ОС)" os.path.join(r'C:\\temp', 'output.txt')
#Результат: 'C:\\temp\\output.txt'
Другие методы модуля os.path:
os.path.getatime(path) время последнего доступа к файлу, в секун-
дах.
os.path.getmtime(path) время последнего изменения файла, в секун-
дах.
os.path.getctime(path) время создания файла (Windows), время по-
следнего изменения файла (Unix).
os.path.splitext(path) разбивает путь на пару (root, ext), где ext начи-
нается с точки и содержит не более одной точки.
43
7. МОДУЛЬ MATH
math.ceil(X) – округление до ближайшего большего числа. math.copysign(X, Y) возвращает число, имеющее модуль такой же, как
и у числа X, а знак как у числа Y.
math.fabs(X) модуль X. math.factorial(X) факториал числа X. math.floor(X) округление вниз. math.fmod(X, Y) остаток от деления X на Y. math.frexp(X) возвращает мантиссу и экспоненту числа. math.ldexp(X, I) - X * 2i. Функция, обратная функции math.frexp(). math.fsum(последовательность) сумма всех членов последовательности.
Эквивалент встроенной функции sum(), но math.fsum() более точна для чисел с плавающей точкой.
math.isfinite(X) является ли X числом. math.isinf(X) является ли X бесконечностью. math.isnan(X) является ли X NaN (Not a Number - не число). math.modf(X) возвращает дробную и целую часть числа X. Оба числа
имеют тот же знак, что и X.
math.trunc(X) усекает значение X до целого. math.exp(X) eX. math.expm1(X) eX - 1. При X → 0 точнее, чем math.exp(X)-1. math.log(X, [base]) логарифм X по основанию base. Если base не указан,
вычисляется натуральный логарифм. math.log1p(X) натуральный логарифм (1 + X). При X → 0 точнее, чем math.log(1+X).
math.log10(X) логарифм X по основанию 10. math.log2(X) логарифм X по основанию 2. Новое в Python 3.3. math.pow(X, Y) - XY. math.sqrt(X) квадратный корень из X. math.acos(X) арккосинус X. В радианах. math.asin(X) арксинус X. В радианах. math.atan(X) арктангенс X. В радианах.
44
7. Модуль math
math.atan2(Y, X) арктангенс Y/X. В радианах. С учетом четверти, в ко- торой находится точка (X, Y).
math.cos(X) косинус X (X указывается в радианах). math.sin(X) синус X (X указывается в радианах). math.tan(X) тангенс X (X указывается в радианах). math.hypot(X, Y) вычисляет гипотенузу треугольника с катетами X и Y
(math.sqrt(x * x + y * y)).
math.degrees(X) конвертирует радианы в градусы. math.radians(X) конвертирует градусы в радианы. math.cosh(X) вычисляет гиперболический косинус. math.sinh(X) вычисляет гиперболический синус. math.tanh(X) вычисляет гиперболический тангенс. math.acosh(X) вычисляет обратный гиперболический косинус. math.asinh(X) вычисляет обратный гиперболический синус. math.atanh(X) вычисляет обратный гиперболический тангенс. math.erf(X) функция ошибок. math.erfc(X) дополнительная функция ошибок (1 - math.erf(X)). math.gamma(X) гамма-функция X. math.lgamma(X) натуральный логарифм гамма-функции X. math.pi pi = 3,1415926... math.e e = 2,718281...
45
8. ЯЗЫК РЕГУЛЯРНЫХ ВЫРАЖЕНИЙ
Регулярные выражения (РВ) это меленький формальный язык,
позволяющий осуществить сложный поиск и работу (замены) с подстро­ками в тексте, основанный на использовании шаблонов. Регулярные вы­ражения используются только для работы только со строковыми типами данных (str).
Шаблон (маска) – это строка-образец (англ. pattern), задающая пра- вило поиска подстроки в строке или тексте, и состоящая из символов тек­ста и специальных символов (метасимволов).
Регулярные выражения используются некоторыми текстовыми ре­дакторами для поиска и подстановки текста. Например, при помощи регу­лярных выражений можно задать шаблоны, позволяющие:
- найти все последовательности символов «кот» в любом контексте,
как то: «кот», «котлета», «терракотовый»;
- найти отдельно стоящее слово «кот» и заменить его на «кошка»;
- найти слово «кот», которому предшествует слово «персидский»
или «чеширский»;
- убрать из текста все предложения, в которых упоминается слово
кот или кошка.
Язык регулярных выражений относительно мал и ограничен, поэто­му не все возможные задачи по обработке строк можно сделать с помо­щью регулярных выражений. Также существуют задачи, которые можно сделать с помощью регулярных выражений, но выражения оказываются слишком сложными. В этих случаях возможно лучше написать обычный Python-код, даже если он будет работать медленнее, чем регулярное вы­ражение, но будет более понятен.
Язык регулярных выражений встроен в Python и доступен при по­мощи модуля re. Подключить модуль re можно с помощью инструкции [2, 3, 12]:
import re
Синтаксис шаблонов
Для того, чтобы осуществить сложный поиск в строке или изменить ее или разбить на части с помощью регулярных выражений, необходимо создать шаблон (строку-образец).
46
8. Язык регулярных выражений
Метасимволы [ ] \ / ^ $ . | ? * + ( ) { } < >
Пример шаблона
Соответствующий результат поиска
”a\.?”
a. или a
”a\\\\b”
a\\b
”a\[F\]”
a[F]
”\Q+-*/ \E”
+-*/
В общем виде формат шаблона представляет собой последовательность символов, каждый из которых может быть снабжен набором специальных символов (метасимволами), задающих условия поиска символа в тексте:
”[Символ_1][Специальные символы] …
[Символ_N][Специальные символы]”
Специальные символы регулярных выражений
В регулярных выражениях к специальным символам (метасимволам) относятся такие символы, как [ ] \ / ^ $ . | ? * + ( ) { } < >. Для представления самих метасимволов в качестве символов текста, их необ­ходимо «экранировать» символом \ (обратная косая черта). Можно экра­нировать целую последовательность символов, заключив её между \Q и \E.
Можно выделить несколько видов специальных символов (метасимволов) в зависимости от заданных условий поиска:
1) символьные классы,
2) метасимволы, задающие позицию внутри текста, строки или слова,
3) квантификаторы (специальные символы, определяющие сколько
раз предшествующее выражение может встречаться),
4) метасимволы группы,
5) метасимволы комментариев,
6) метасимволы перечислений,
7) метасимволы просмотра вперед.
47
8. Язык регулярных выражений
\d
[0-9]
\D
[^0-9]
\s
[ \f\n\r\t\v]
\S
[^ \f\n\r\t\v]
\w
[[a-zA-Z0-9_]]
\W
[^a-zA-Z0-9_]
Список последовательностей специальных символов, которые
используются в шаблонах регулярных выражений :
Символьные классы
Символьный класс – набор символов в квадратных скобках [ ], который указывает интерпретатору регулярных выражений, что на дан­ном месте в строке может находиться один из перечисленных внутри квадратных скобок символов.
Например, символьный класс [абв] задаёт возможность появления в тексте одного из трёх указанных символов, а символьный класс [0123456789] – одной из цифр. Возможно указание диапазонов симво­лов через тире: например, [А-Яа-яёЁ] соответствует всем буквам рус­ского алфавита, за исключением букв «Ё» и «ё».
Для исключения какого-либо набора символов, которых не должно быть на этом месте в строке, используется символ ^ внутри квадратных скобок. Например, [^0-9] соответствует любому символу, кроме цифр.
Буква «ё» не входит в диапазон [ая]
Внимание!!!
Некоторые символьные классы можно заменить специальными мета­символами:
Метасимвол
Символьный
класс
Соответствующий результат
поиска
48
Один цифровой символ
Один нецифровой символ
Один пробельный символ
Один непробельный символ
Один буквенный или цифровой символ или знак подчёркивания
Один любой символ, кроме буквенного или цифрового символа или знака подчёркивания
8. Язык регулярных выражений
Метасимвол
Позиция поиска
в строке
Пример
шаблона
Соответствующий результат
поиска
^
Начало текста
”^a”
aaa aaa
$
Конец текста
”a$”
aaa aaa
\b
Граница слова
”a\b”
aaa aaa
”\ba”
aaa aaa
\B
Не граница слова
”\Ba\B”
aaa aaa
\G
Предыдущий успешный поиск
”\Ga”
aaa aaa (поиск остановился
на 4-й позиции там, где не нашлось a)
Метасимвол
Число повторений
Пример
шаблона
Соответствующий
результат поиска
{n}
Ровно n раз
colou{3}r
colouuur
{m,n}
От m до n включи­тельно
colou{2,4}r
colouur, colouuur, colouuuur
{m,}
Не менее m
colou{2,}r
colouur, colouuur, colouuuur и т. д.
{,n}
Не более n
colou{,3}r
color, colour, colouur, colouuur
Метасимволы, задающие позицию внутри текста, строки или слова
Следующие специальные символы позволяют осуществлять поиск регулярного выражения относительно начала и конца строки или границ слова:
Квантификаторы
Квантификатор после символа, символьного класса или группы определяет, сколько раз предшествующее выражение может встречаться (количество вхождений символов в строку). Следует учитывать, что кван­тификатор может относиться более чем к одному символу в регулярном выражении, только если это символьный класс или группа.
49
8. Язык регулярных выражений
Метасимвол
Число
повторений
Эквивалент
Пример
Соответствующий
результат поиска
?
Ноль или одно
{0,1}
colou?r
color, colour
*
Ноль или более
{0,}
colou*r
color, colour, colouur и т. д.
+
Одно или более
{1,}
colou+r
colour, colouur и т. д. (но не color)
Символьные классы в сочетании с квантификаторами позволяют устанавливать соответствия с реальными текстами. Например, столбцами цифр, телефонами, почтовыми адресами, элементами HTML-разметки и др.
«Жадные» квантификаторы
Все квантификаторы являются «жадными». То есть при поиске соот­ветствия ищется самая длинная подстрока, соответствующая шаблону, и не учитываются более короткие соответствия.
Пример:
s = ”<b>Text1</b>Text2<b>Text3</b>” p = re.compile(r”<b>.*</b>”, re.S)
p = findall(s) #Результат [‘<b>Text1</b>Text2<b>Text3</b>’]
Ограничение «жадности» квантификаторов
Проблему «жадности» квантификаторов можно решить двумя спосо-
бами.
1. Учитывать символы, не соответствующие желаемому образцу.
2. Определить квантификатор как нежадный (ленивый, англ. lazy),
добавив после него знак вопроса.
Пример:
s = ”<b>Text1</b>Text2<b>Text3</b>” p = re.compile(r”<b>.*?</b>”, re.S) p.findall(s) #Результат [’<b>Text1</b>’, ’<b>Text3</b>’]
50
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]