Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на языке Python. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆

Вкладка «Завершение»

Вкладка завершение (завершение/заполнение табуляции, автодополнение, автозавершение) – это функция, которая поможет повысить скорость выполне­ния задач из командной строки. Если набрать команду и нажать кнопку табуля­ции (Tab) на клавиатуре, оболочка командной строки попытается выполнить команду автоматически.
Попробуйте набрать ech в командной строке, а затем tab; ech автомати­чески превратится в echo. Также можно использовать вкладку для заполнения путей к файлам или каталогам. Начните вводить путь к каталогу, в котором вы находитесь, и завершите его, нажав tab. Если при нажатии tab ничего не про­исходит, то две команды или пути названы одинаково, и оболочка не знает, что выбрать. Например, если у вас есть каталог с именем car и другой каталог с именем candy, и вы набираете ca и пытаетесь выполнить табуляцию, ничего не произойдет, потому что оболочка не будет знать, что выбрать: car или candy. Если добавите n, набрав can, и нажмете Tab Complete, оболочка выполнит автозаполнение candy, потому что знает, что car неверен.

Функция wildcard (подстановочный знак)

Подстановочный знак – это символ, используемый для сопоставления с шаблоном. Двумя примерами подстановочных знаков являются звездочка и вопросительный знак. Подстановочный знак звездочки соответствует всему, что начинается или заканчивается шаблоном, в зависимости от того, ставится он до или после шаблона. Подстановочные знаки звездочки обычно использу­ются с командой ls. Команда ls*.txt покажет все файлы в текущем катало-
ге, которые заканчиваются на .txt, тогда как ls.txt* покажет все файлы, которые заканчиваются на .txt.
Знак вопроса будет соответствовать любому одиночному символу. Таким образом, ls t?o покажет все файлы или каталоги, которые соответствуют t, за которым следует любой символ, за которым следует o. Если бы у вас были каталоги с именем two и too, они оба были бы напечатаны.
131

Другие инструменты

Если терминал загроможден, можно очистить его с помощью команды clear. Если процесс занимает слишком много времени, можно остановить его с помощью control+c. Еще одна мощная команда – grep, используемая для поиска в файлах шаблонов, описана в следующей главе.
В этой главе были описаны лишь основы bash. Чтобы узнать больше об использовании bash, прочитайте статью по адресу habrahabr.ru/post/47163/.

14. Регулярные выражения

Регулярное выражение – это последовательность символов, используемая для поиска шаблона в строке. В этой главе можно получить практические навыки в использовании регулярных выражений из командной строки с помо­щью команды grep для применения регулярных выражений при поиске фай­лов, также научиться использовать регулярные выражения в Python.

Настройка

Чтобы начать практиковаться в использовании регулярных выражений, со­здайте файл с именем zen.txt. В командной строке (убедитесь, что находитесь в каталоге, где вы создали zen.txt) введите команду python3 -c «import
this». Команда распечатает «Дзен Пайтона», поэму, написанную Тимом Пи­терсом:
The Zen of Python
Beautiful is better than ugly.
Explicit is better than im plicit.
Simple is better than complex.
Complex is better tha n complicated.
Flat is bette r than nested.
Sparse is better tha n de nse .
Readability counts.
Special cas e s aren’t special enough to break the rules.
Although prac ti cal i ty bea ts pur i ty.
132
Errors should ne ve r pass si le nt ly . Unless expl icitly silenced. In the face of ambiguity, refuse the temptation to guess. There should be one – and preferably only one – obvious way to do it.
Although that way may not be obvious at first unless you’re Dutch. Now is better than ne ver.
Although never is often better than right now. If the implementation is hard to explain, it’s a bad idea. If the implementation is easy to explain, it may be a good idea. Namespaces are one hon ki n g grea t idea – let’s do more of those !
Флаг -c выполняет код, переданный в виде строки, а import this печа­тает Zen of Python при выполнении. Скопируйте и вставьте Zen of Python в файл zen.txt. Также рекомендуется прочитать Zen of Python, так как она содержит много мудрости. Используйте функцию exit() для выхода из Python, если используете интерактивную оболочку bash.
Если используете macOS, установите следующие переменные среды в тер­минале:
$ export GREP_OPTIONS='--color=always' $ export GREP_COLOR='1;35;40’
Это заставит grep выделить слова, совпавшие в терминале, что по умол­чанию происходит в Ubuntu, но не в macOS. Помните, что установка перемен­ной среды из терминала не является постоянной, поэтому, если выйти из тер­минала и вернуться, придется снова установить переменные среды. Добавьте переменные среды в файл .profile, если хотите сделать изменение постоянным.

Простое совпадение

Команда grep принимает в качестве параметров регулярное выражение и путь к файлу, в котором нужно искать регулярное выражение. В командной строке в каталоге, где вы создали файл zen.txt, введите следующую команду:
$ grep Beautiful zen.txt >> Beautiful is better than ugly.
133
Beautiful – это самый простой вид регулярного выражения, а zen.txt – это
путь к файлу, в котором нужно искать регулярное выражение. Консоль напеча­тала строку Beautiful is better than ugly с выделенным красным цветом шрифта Beautiful, потому что это слово совпало с регулярным выражением.

Игнорирование регистра

Если изменить регулярное выражение с Beautiful на beautiful, оно больше
не будет соответствовать чему-либо в Zen of Python. Введите grep beautiful zen.txt, чтобы убедиться в этом. Если хотите, чтобы ваше ре­гулярное выражение соответствовало слову beautiful независимо от регистра
(независимо от того, заглавные буквы написаны или нет), можно использовать флаг -i:
$ grep -i beautiful zen.txt >> Beautiful is better than ugly.
Тогда grep будет игнорировать регистр и снова выделит Beautiful.

Вывод только конкретных совпадений слов

Команда grep возвращает всю строку файла, в котором было найдено совпадение. Можно вернуть только конкретное совпадающее слово, используя флаг -o:
$ grep -o Beautiful zen.txt >> Beautiful
По умолчанию grep возвращает всю фразу, в которой она нашла совпаде­ние: Beautiful is better than ugly, но поскольку добавили флаг -o, возвращается только точное совпадение с шаблоном, т.е. слово Beautiful.

Совпадение в начале и в конце

В регулярных выражениях есть определенные символы, которые не совпа­дают сами с собой, но вместо этого делают что-то особенное. Например, сим­вол (^) используется для поиска совпадений только в том случае, если они встречаются в начале строки:
134
$ grep ^If zen.txt >> If the implementation is hard to explain, it’s a bad idea. >> If the implementation is easy to explain, it may be a good idea.
Точно так можно использовать знак доллара ($), чтобы искать совпадения
с шаблоном только в конце строки:
$ grep idea.$ zen.txt >> If the implementation is hard to explain, it’s a bad idea. >> If the implementation is easy to explain, it may be a good idea.
Совпали две строки с одинаковыми окончаниями idea. Фраза Namespaces
are one honking gre at i dea – let’s do more of those! была проигнорирована, потому что, хотя она и включает слово idea, но не заканчивается им. Можете объеди­нить два совпадения, которые были рассмотрены, в регулярное выражение ^$ для поиска пустых строк в файле.

Поиск совпадений с несколькими символами

Можно использовать квадратные скобки в регулярном выражении для со-
ответствия любому символу внутри скобок. В этом примере вместо сопостав­ления текста из файла zen.txt будет использоваться конвейер для передачи стро­ки в grep:
$ echo Two is a number and too is not. | grep -i t[ow]o >> Two is a number and too is not.
Помните, что символ | передает выходные данные одной команды в каче­стве входных данных следующей. В этом случае выходные данные echo пере­даются как входные данные grep. Команда echo Two is a number and too is not | grep -i t[ow]o будет соответствовать и two, и too, по­тому что регулярное выражение ищет t, за которым следует либо o, либо w, за которым следует o.

Повторение

Можно добавить в паттерны повторение с помощью символа
“звездочки”.
Звездочка означает, что «предшествующий элемент будет найден ноль или бо­лее раз». Например, используя звездочку, можно найти совпадения с tw, за ко-
135
торым следует любое количество o. Регулярное выражение grep two* вы- полняет это:
$ echo two twooo twoo not too. | grep -o two* >> two >> twooo
Добавление * после two означает, что регулярное выражение должно со-
ответствовать чему-либо, за которым следует two с любым количеством o.

Диапазон

Можно сопоставить диапазон букв или цифр, поместив диапазон в скобки.
Например, захотеть сопоставить только числа из текста 122233 hello 334443 goodbye 939333. Регулярное выражение [[:digit:]]* будет соответствовать всем числам в строке, потому что оно включает диапазон чисел
(0-9), за которым следует символ *, который указывает регулярному выраже­нию сопоставлять как можно больше чисел в строке.
$ echo 122233 hello 334443 goodbye 939333 | grep -o [0-9]* >> 122233 >> 33443 >> 939333
Точно так можно сопоставить диапазон символов (в данном случае все
символы) с регулярным выражением [[:alpha:]]:
$ echo 122233 hello 334443 goodbye 939333 | grep [[:alpha:]]*

Экранирование (escaping)

Чтобы сопоставить один из специальных символов, например знак долла-
ра, можно экранировать символ. Экранирование означает добавление перед символом специального символа, чтобы программа, оценивающая синтаксис, знала, что можно использовать фактический символ, а не специальное значе­ние, которое обычно имеет символ. Экранирование в регулярных выражениях выполняется с помощью обратной косой черты:
$ echo I love $ | grep \$ >> I love $
136
Обычно знак доллара имеет особое значение, заключающееся только в со­поставлении чего-либо в конце строки, однако поскольку вы экранировали его, регулярное выражение ищет знак доллара.

Регулярные выражения в Python

В Python есть библиотека re (от англ. словосочетания regular expressions – регулярные выражения), которая позволяет использовать регулярные выраже­ния в программах на Python. Символы в регулярных выражениях Python не все­гда совпадают с grep, но концепция регулярных выражений та же.
import re
line = "Match this." matchObj = re.search('this', line)
if matchObj:
print(matchObj.group())
else:
print("No match!")
>> this
Библиотека re используется различными методами, такими как поиск, который возвращает первое вхождение шаблона, который вы ищете. Если сов­падение найдено, возвращается объект SRE_Match и можно получить совпаде­ние, вызвав функцию group(). Если совпадение не найдено, re.search() возвращает None.
Можно использовать функцию findall() в модуле re, чтобы найти каждое вхождение шаблона, а не только первое совпадение.
import re line = """The numbers 172 can be found on the back of the
U.S. $5 dollar bill in the bushes at the base of the Lincoln Memorial."""
matchObj = re.findall('\d+', line)
if matchObj:
print matchObj
137
else:
print ("No match!")
>> ['172', '5']
Функция re.findall()модуля re возвращает список всех строк, соот-
ветствующих шаблону, и пустой список, если совпадений нет. Синтаксис функции:
re.findall(pattern, string, flags=0),
где
pattern : шаблон, соответствия которому нужно обнаружить; string : строка, внутри которой требуется отыскать соответствия шаблону; flags=0 : флаги управления интерпретацией регулярного выражения.
Функция сканирует строку слева направо, вхождения возвращаются в по-
рядке обнаружения в виде списка. Возвращается список строк либо список кор­тежей, если в шаблоне присутствуют несколько групп.
Символ \d означает цифру, а символ + означает повторение предыдущего
символа один или более раз. Если их совместить \d+, получится выражение, которое означает одну или более цифр.
Если сопоставить все, что находится между двумя символами подчеркива-
ния, можно сделать это таким образом:
import re line = """__yellow__ __red__ and __blue__ are colors""" matchObj = re.findall('__.*?__', line)
if matchObj:
print matchObj
else:
print("No match!")
Два символа подчеркивания соответствуют двум символам подчеркивания, точка соответствует любому символу, а вопросительный знак, следующий за звездочкой, означает, что любой символ будет совпадать до тех пор, пока не появится еще одно двойное подчеркивание.
138

15. Менеджеры пакетов

Менеджеры пакетов – это программы, которые устанавливают и управля-
ют другими программами в операционной системе. Примером управления про­граммой является поддержание программы в актуальном состоянии при выходе новой версии. Менеджеры пакетов полезны, потому что программисты исполь­зуют программы для создания новых программ. Например, большинство про­грамм используют одну или несколько баз данных, которые сами являются программами. Программисты используют менеджеры пакетов для загрузки и обновления своих баз данных, а также для установки и управления множе­ством других программ, которые они используют в своей работе.
Pip
Pip используется для загрузки пакетов Python. Pip устанавливает пакет
Python, после чего можно импортировать загруженную программу в качестве модуля в свои программы на Python. Сначала проверьте, установлен ли Pip, пе­рейдя либо в оболочку командной строки Bash, либо в командную строку, если используете Windows (которую можете найти, выполнив поиск в командной строке в окне запуска), и набрав pip.
$ pip >> Usage: pip <command> [options] Commands: install Install packages.
download Download packages. ...
Должен быть выведен список команд, которые можно использовать с по­мощью pip. Pip поставляется с Python, когда его загружаете, но в более ранних версиях этого не было, поэтому, если при вводе pip ничего не происходит, загуглите “установка pip с помощью easy_install”. Ознакомиться с инструкция­ми по его установке можно на сайте https://pythonworld.ru/osnovy/pip.html Можно использовать pip install [package_name] для установки нового пакета. Найти все доступные для загрузки пакеты Python можно по адресу
https://pypi.python.org/pypi. Есть два способа указать пакет: можно просто ис-
139
.
пользовать имя пакета или указать имя пакета, за которым следует == и номер версии. Если используется имя пакета, будет загружена самая последняя вер­сия. Иногда не нужна самая последняя версия, а нужна конкретная версия, по­этому существует второй вариант. Вот пример того, как можно установить па­кет под названием Flask, популярный пакет Python, который позволяет легко создавать веб-сайты, используя номер версии:
pip install Flask==0.11.1 >>
В Unix-подобных системах нужно использовать команду sudo:
$ sudo pip install Flask==0.11.1 >> Password: >> Successfully installed flask-0.11.1
Когда установка будет завершена, модуль Flask будет помещен в специ­альную папку на компьютере, которая называется site-packages. Site-packages автоматически включается в ваш путь Python, поэтому, когда Python импор­тирует модуль, он просматривает site-packages, чтобы увидеть, есть ли он там.
Теперь, написав программу, можно импортировать и использовать модуль Flask. Создайте новый файл Python и добавьте следующий код:
from flask import Flask app = Flask(__name__) @app.route('/')
def index ():
return "Hello, World!"
app.run(port = '8000')
>> * Running on http://127.0.0.1:8000/ (Press CTRL+C to quit)
Можно просмотреть пакеты, которые установили с помощью команды pip freeze:
pip freeze >> Flask==0.11.11 ...
140
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]