Пишем первую программу на Python в Linux
Python доступен практически в любом современном дистрибутиве Linux, поэтому тем, кто собирается написать свою первую программу на Python в Linux, установка никаких дополнительных программ не потребуется (в дальнейшем нам конечно понадобятся кое-какие дополнительные библиотеки Python, но мы обязательно разберем их установку).
Для написания своей первой программы на Python в Linux, просто запустите свой любимый Linux и следуйте шагам этого совета.
Для написания Python-программ можно использовать любой из текстовых редакторов (я буду рассматривать редактор vi/vim). Не пугайтесь, основное количество программистов не использует для написания простых (и не только!) программ какое-либо многофункциональное программное обеспечение (типа сред программирования и т.п.). Достаточно воспользоваться тем, что есть под рукой!
Давайте попробуем посмотреть наличие Python в вашем дистрибутиве Linux. Для этого выполните команду: which python и, в случае успеха, вы увидите что-то вроде этого:
Как видим, Python присутствует в нашей системе и это хороший знак для того, чтобы продолжить наши действия.
Создадим каталог, в котором мы будем практиковаться в написании программ на Python и назовем его testplace: mkdir testplace и перейдем в него, выполнив команду: cd
Теперь создадим текстовый файл first.py, который и будет нашей первой программой на Python. Выполните команду: touch first.py и посмотрим его наличие командой: ls он обязательно там должен появиться!
Обратите внимание, что расширение у созданного нами файла должно быть .py. Это расширение стандартно для программ на Python и вскоре вы увидите, что очень много программ на Python уже существуют в вашей системе (если у вас Linux/Unix).
Теперь приступаем к написанию кода нашей первой программы на Python.
Откроем созданный нами файл в редакторе vi/vim: vi first.py и впишем в него следующие строки: #!/usr/bin/python
# My first program on Python!
print «Hello World. »
Выйдем из файла с сохранением, выполнив: :wq .
Для того, чтобы выполнить написанную нами программу в Linux, нам необходимо назначить ей права на выполнение. Сделаем это командой: chmod x first.py
Пришло время попробовать запустить созданную нами нашу первую программу на Python. Выполните в командной строке: ./first.py и посмотрите на результат. Он должен быть таким:
Код нашей первой программы очень прост:
1 строка ( #!/usr/bin/python ) — мы указываем путь к интерпретатору. Этой строкой будут начинаться многие дальнейшие наши программы, поэтому введем это за правило.
2 строка ( # My first program on Python! ) — комментарий. Все комментарии начинаются со знака #. Заметьте, что предыдущая строка — не комментарий!
3 строка ( print «Hello World. « ) — это просто вывод на экран надписи «Hello World. «.
Мы с вами написали крайне примитивную программу, выводящую на экран всего лишь одну строку, но многие учебники по программированию начинаются именно с этой «программы». Это стандарт, с которого начинают все программисты. С него начали и мы.
В последующих статьях мы не будем разбирать то, как создать файл и как назначить ему права на выполнение, а будем разбирать код создаваемых программ и сам процесс их работы.
Основы программирования Python
Python — это популярный и мощный язык сценариев, с помощью которого вы можете сделать все что захотите. Например, вы можете сканировать веб-сайты и собирать с них данные, создавать сетевые и инструменты, выполнять вычисления, программировать для Raspberry Pi, разрабатывать графические программы и даже видеоигры. На Python можно \\ писать системные программы, независимые от платформы.
В этой статье мы рассмотрим основы программирования на Python, мы постараемся охватить все основные возможности, которые вам понадобятся чтобы начать пользоваться языком. Мы будем рассматривать использование классов и методов для решения различных задач. Предполагается, что вы уже знакомы с основами и синтаксисом языка.
Что такое Python?
Я не буду вдаваться в историю создания и разработки языка, это вы без труда узнать из видео, которое будет прикреплено ниже. Важно отметить, что Python — скриптовый язык. Это означает, ваш код проверяется на ошибки и сразу же выполняется без какой-либо дополнительной компиляции или переработки. Такой подход еще называется интерпретируемым.
Это снижает производительность, но очень удобно. Здесь присутствует интерпретатор, в который вы можете вводить команды и сразу же видеть их результат. Такая интерактивная работа очень сильно помогает в обучении.
Работа в интерпретаторе
Запустить интерпретатор Python очень просто в любой операционной системе. Например, в Linux достаточно набрать команду python в терминале:
В открывшемся приглашении ввода интерпретатора мы видим версию Python, которая сейчас используется. В наше время очень сильно распространены две версии Python 2 и Python 3. Они обе популярны, потому что на первой было разработано множество программ и библиотек, а вторая — имеет больше возможностей. Поэтому дистрибутивы включают обе версии. По умолчанию запускается вторая версия. Но если вам нужна версия 3, то нужно выполнить:
Именно третья версия будет рассматриваться в этой статье. А теперь рассмотрим основные возможности этого языка.
Операции со строками
Строки в Python неизменяемые, вы не можете изменить один из символов строки. Любое изменение содержимого требует создания новой копии. Откройте интерпретатор и выполняйте перечисленные ниже примеры, для того чтобы лучше усвоить все написанное:
1. Объединение строк
str = «welcome » + «to python»
print (str)
2. Умножение строк
str = «Losst» * 2
print (str)
3. Объединение с преобразованием
Вы можете объединить строку с числом или логическим значением. Но для этого нужно использовать преобразование. Для этого существует функция str():
str = «Это тестовое число » + str(15)
print (str)
4. Поиск подстроки
Вы можете найти символ или подстроку с помощью метода find:
str = «Добро пожаловать на losst.ru»
print(str.find(«losst.ru»))
Этот метод выводит позицию первого вхождения подстроки losst.ru если она будет найдена, если ничего не найдено, то возвращается значение -1. Функция начинает поиск с первого символа, но вы можете начать с энного, например, 26:
str = «Добро пожаловать на сайт losst.ru»
print(str.find(«losst»,26))
В этом варианте функция вернет -1, поскольку строка не была найдена.
5. Получение подстроки
Мы получили позицию подстроки, которую ищем, а теперь как получить саму подстроку и то, что после нее? Для этого используйте такой синтаксис [начало:конец], просто укажите два числа или только первое:
str = «Один два три»
print(str[:2])
print(str[2:])
print(str[3:5])
print(str[-1])
Первая строка выведет подстроку от первого до второго символа, вторая — от второго и до конца. Обратите внимание, что отсчет начинается с нуля. Чтобы выполнять отсчет в обратном порядке, используйте отрицательное число.
6. Замена подстроки
Вы можете заменить часть строки с помощью метода replace:
str = «Этот сайт про Linux»
str2 = str.replace(«Linux», «Windows»)
print(str2)
Если вхождений много, то можно заменить только первое:
str = «Это сайт про Linux и я подписан на этот сайт»
str2 = str.replace(«сайт», «страница»,1)
print(str2)
7. Очистка строк
Вы можете удалить лишние пробелы с помощью функции strip:
str = » Это веб-сайт про Linux »
print(str.strip())
Также можно удалить лишние пробелы только справа rstrip или только слева — lstrip.
8. Изменение регистра
Для изменения регистра символов существуют специальные функции:
str=»Добро пожаловать на Losst»
print(str.upper())
print(str.lower())
9. Конвертирование строк
Есть несколько функций для конвертирования строки в различные числовые типы, это int(), float() , long() и другие. Функция int() преобразует в целое, а float() в число с плавающей точкой:
str=»10″
str2=»20″
print(str+str2)
print(int(str)+int(str2))
10. Длина строк
Вы можете использовать функции min(), max(), len() для расчета количества символов в строке:
str=»Добро пожаловать на сайт Losst»
print(min(str))
print(max(str))
print(len(str))
Первая показывает минимальный размер символа, вторая — максимальный, а третья — общую длину строки.
11. Перебор строки
Вы можете получить доступ к каждому символу строки отдельно с помощью цикла for:
str=»Добро пожаловать на сайт»
for i in range(len(str)):
print(str[i])
Для ограничения цикла мы использовали функцию len(). Обратите внимание на отступ. Программирование на python основывается на этом, здесь нет скобок для организации блоков, только отступы.
Операции с числами
Числа в Python достаточно просто объявить или применять в методах. Можно создавать целые числа или числа с плавающей точкой:
num1 = 15
num2 = 3,14
1. Округление чисел
Вы можете округлить число с помощью функции round, просто укажите сколько знаков нужно оставить:
2. Генерация случайных чисел
Получить случайные числа можно с помощью модуля random:
import random
print(random.random())
По умолчанию число генерируется из диапазона от 0,0 до 1,0. Но вы можете задать свой диапазон:
import random
numbers=[1,2,3,4,5,6,7]
print(random.choice(numbers))
Операции с датой и временем
Язык программирования Python имеет модуль DateTime, который позволяет выполнять различные операции с датой и временем:
import datetime
cur_date = datetime.datetime.now()
print(cur_date)
print(cur_date.year)
print(cur_date.day)
print(cur_date.weekday())
print(cur_date.month)
print(cur_date.time())
В примере показано как извлечь нужное значение из объекта. Вы можете получить разницу между двумя объектами:
import datetime
time1 = datetime.datetime.now()
time2 = datetime.datetime.now()
timediff = time2 — time1
print(timediff.microseconds)
Вы можете сами создавать объекты даты с произвольным значением:
time1 = datetime.datetime.now()
time2 = datetime.timedelta(days=3)
time3=time1+time2
print(time3.date())
1. Форматирование даты и времени
Метод strftime позволяет изменить формат даты и времени зависимо от выбранного стандарта или указанного формата. Вот основные символы форматирования:
- %a — день недели, сокращенное название;
- %A — день недели, полное название;
- %w — номер дня недели, от 0 до 6;
- %d — день месяца;
- %b — сокращенное название месяца;
- %B — полное название месяца;
- %m — номер месяца;
- %Y — номер года;
- %H — час дня в 24 часовом формате;
- %l — час дня в 12 часовом формате;
- %p — AM или PM;
- %M — минута;
- %S — секунда.
import datetime
date1 = datetime.datetime.now()
print(date1.strftime(‘%d. %B %Y %I:%M%p’))
2. Создать дату из строки
Вы можете использовать функцию strptime() для создания объекта даты из строки:
import datetime
date1=datetime.datetime.strptime(«2016-11-21», «%Y-%m-%d»)
date2=datetime.datetime(year=2015, month=11, day=21)
print(date1);
print(date2);
Операции с файловой системой
Управление файлами выполняется очень просто в язык программирования Python, это лучший язык для работы с файлами. Да и вообще, можно сказать, что Python — это самый простой язык.
1. Копирование файлов
Для копирования файлов нужно использовать функции из модуля subutil:
import shutil
new_path = shutil.copy(‘file1.txt’, ‘file2.txt’)
Если file1 — символическая ссылка, операция копирования все равно создаст отдельный файл. Если вы хотите скопировать именно символическую ссылку используйте такую конструкцию:
new_path = shutil.copy(‘file1.txt’, ‘file2.txt’, follow_symlinks=False)
2. Перемещение файлов
Перемещение файлов выполняется с помощью функции move:
Функция rename из модуля os позволяет переименовывать файлы:
import os
os.rename(‘file1.txt’, ‘file3.txt’)
3. Чтение и запись текстовых файлов
Вы можете использовать встроенные функции для открытия файлов, чтения или записи данных в них:
fd = open(‘file1.txt’)
content = fd.read()
print(content)
Сначала нужно открыть файл для работы с помощью функции open. Для чтения данных из файла используется функция read, прочитанный текст будет сохранен в переменную. Вы можете указать количество байт, которые нужно прочитать:
fd = open(‘file1.txt’)
content = fd.read(20)
print(content)
Если файл слишком большой, вы можете разбить его на строки и уже так выполнять обработку:
content = fd.readlines()
print(content[0])
Чтобы записать данные в файл, его сначала нужно открыть для записи. Есть два режима работы — перезапись и добавление в конец файла. Режим записи:
fd = open(‘file1.txt’,’w’)
content = fd.write(‘Новое содержимое’)
И добавление в конец файла:
fd = open(‘file1.txt’,’a’)
content = fd.write(‘Новое содержимое’)
4. Создание директорий
Чтобы создать директорию используйте функцию mkdir из модуля os:
import os
os.mkdir(‘./новая папка’)
5. Получение времени создания
Вы можете использовать функции getmtime(), getatime() и getctime() для получения времени последнего изменения, последнего доступа и создания. Результат будет выведен в формате Unix, поэтому его нужно конвертировать в читаемый вид:
import os
import datetime
tim=os.path.getctime(‘./file1.txt’)
print(datetime.datetime.fromtimestamp(tim))
6. Список файлов
С помощью функции listdir() вы можете получить список файлов в папке:
import os
files= os.listdir(‘.’)
print(files)
Для решения той же задачи можно использовать модуль glob:
import glob
files=glob.glob(‘*’)
print(files)
7. Сериализация объектов Python
Сериализация позволяет сохранить объект в строку, для его последующего восстановления. Для этого используйте модуль pickle:
import pickle
fd = open(‘myfile.pk ‘, ‘wb’)
pickle.dump(mydata,fd)
Затем для восстановления объекта используйте:
import pickle
fd = open(‘myfile.pk ‘, ‘rb’)
mydata = pickle.load(fd)
8. Сжатие файлов
Стандартная библиотека Python позволяет работать с различными форматами архивов, например, zip, tar, gzip, bzip2. Чтобы посмотреть содержимое файла используйте:
import zipfile
my_zip = zipfile.ZipFile(‘my_file.zip’, mode=’r’)
print(file.namelist())
А для создания zip архива:
import zipfile
file=zipfile.ZipFile(‘files.zip’,’w’)
file.write(‘file1.txt’)
file.close()
Также вы можете распаковать архив:
import zipfile
file=zipfile.ZipFile(‘files.zip’,’r’)
file.extractall()
file.close()
Вы можете добавить файлы в архив так:
import zipfile
file=zipfile.ZipFile(‘files.zip’,’a’)
file.write(‘file2.txt’)
file.close()
9. Разбор CSV и Exel файлов
С помощью модуля pandas можно смотреть и разбирать содержимое CSV и Exel таблиц. Сначала нужно установить модуль с помощью pip:
sudo pip install pandas
Затем для разбора наберите:
import pandas
data=pandas.read_csv(‘file.csv)
По умолчанию pandas использует первую колонку для заголовков каждой из строк. Вы можете задать колонку для индекса с помощью параметра index_col или указать False, если он не нужен. Чтобы записать изменения в файл используйте функцию to_csv:
Таким же образом можно разобрать файл Exel:
data = pd.read_excel(‘file.xls’, sheetname=’Sheet1′)
Если нужно открыть все таблицы, используйте:
Затем можно записать все данные обратно:
Работа с сетью в Python
Программирование на Python 3 часто включает работу с сетью. Стандартная библиотека Python включает в себя возможности работы с сокетами для доступа к сети на низком уровне. Это нужно для поддержки множества сетевых протоколов.
import socket
host = ‘192.168.1.5’
port = 4040
my_sock = socket.create_connection ((host, port))
Этот код подключается к порту 4040 на машине 192.168.1.5. Когда сокет открыт, вы можете отправлять и получать данные:
Нам необходимо писать символ b, перед строкой, потому что надо передавать данные в двоичном режиме. Если сообщение слишком большое, вы можете выполнить итерацию:
msg = b’Longer Message Goes Here’
mesglen = len(msg)
total = 0
while total
Для получения данных вам тоже нужно открыть сокет, только используется метод my_sock_recv:
Здесь мы указываем сколько данных нужно получить — 20000, данные не будут переданы в переменную, пока не будет получено 20000 байт данных. Если сообщение больше, то для его получения нужно создать цикл:
buffer = bytearray(b’ ‘ * 2000)
my_sock.recv_into(buffer)
Если буфер пуст, туда будет записано полученное сообщение.
Работа с почтой
Стандартная библиотека Python позволяет получать и отправлять электронные сообщения.
1. Получение почты от POP3 сервера
Для получения сообщений мы используем POP сервер:
import getpass,poplib
pop_serv = poplib.POP3(‘192.168.1.5’)
pop_serv.user(«myuser»)
pop_serv.pass_(getpass.getpass())
Модуль getpass позволяет получить пароль пользователя безопасным образом, так что он не будет отображаться на экране. Если POP сервер использует защищенное соединение, вам нужно использовать класс POP3_SSL. Если подключение прошло успешно, вы можете взаимодействовать с сервером:
msg_list = pop_serv.list() # to list the messages
msg_count = pop_serv.msg_count()
Для завершения работы используйте:
2. Получение почты от IMAP сервера
Для подключения и работы с сервером IMAP используется модуль imaplib:
import imaplib, getpass
my_imap = imaplib.IMAP4(‘imap.server.com’)
my_imap.login(«myuser», getpass.getpass())
Если ваш IMAP сервер использует защищенное соединение, нужно использовать класс IMAP4_SSL. Для получения списка сообщений используйте:
data = my_imap.search(None, ‘ALL’)
Затем вы можете выполнить цикл по выбранному списку и прочитать каждое сообщение:
msg = my_imap.fetch(email_id, ‘(RFC822)’)
Но, не забудьте закрыть соединение:
3. Отправка почты
Для отправки почты используется протокол SMTP и модуль smtplib:
import smtplib, getpass
my_smtp = smtplib.SMTP(smtp.server.com’)
my_smtp.login(«myuser», getpass.getpass())
Как и раньше, для защищенного соединения используйте SMTP_SSL. Когда соединение будет установлено, можно отправить сообщение:
from_addr = ‘me@example.com’
to_addr = ‘you@example.com’
msg = ‘From: me@example.com\r\nTo: you@example.com\r\n\r\nHello, this is a test message’
my_smtp.sendmail(from_addr, to_addr, msg)
Работа с веб-страницами
Программирование на Python часто используется для написания различных скриптов для работы с веб.
1. Веб краулинг
Модуль urllib позволяет выполнять запросы к веб-страницам различными способами. Для отправки обычного запроса используется класс request. Например, выполним обычный запрос страницы:
import urllib.request
my_web = urllib.request.urlopen(‘https://www.google.com’)
print(my_web.read())
2. Использование метода POST
Если вам нужно отправить веб-форму, необходимо использовать не GET запрос, а POST:
import urllib.request
mydata = b’Your Data Goes Here’
my_req = urllib.request.Request(‘http://localhost’, data=mydata,method=’POST’)
my_form = urllib.request.urlopen(my_req)
print(my_form.status)
3. Создание веб-сервера
С помощью класса Socket вы можете принимать входящие подключения, а значит можете создать веб-сервер с минимальными возможностями:
import socket
host = »
port = 4242
my_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
my_server.bind((host, port))
my_server.listen(1)
Когда сервер создан. вы можете начать принимать соединения:
addr = my_server.accept()
print(‘Connected from host ‘, addr)
data = conn.recv(1024)
И не забудьте закрыть соединение:
Многопоточность
Как и большинство современных языков, Python позволяет запускать несколько параллельных потоков, которые могут быть полезными, если нужно выполнить сложные вычисления. В стандартной библиотеке есть модуль threading, который содержит класс Therad:
import threading
def print_message():
print(‘The message got printed from a different thread’)
my_thread = threading.Thread(target=print_message)
my_thread.start()
Если функция работает слишком долго, вы можете проверить все ли в порядке, с помощью функции is_alive(). Иногда вашим потокам нужно получать доступ к глобальным ресурсам. Для этого используются блокировки:
import threading
num = 1
my_lock = threading.Lock()
def my_func():
global num, my_lock
my_lock.acquire()
sum = num + 1
print(sum)
my_lock.release()
my_thread = threading.Thread(target=my_func)
my_thread.start()
Выводы
В этой статье мы рассмотрели основы программирования python. Теперь вы знаете большинство часто используемых функций и можете применять их в своих небольших программах. Вам понравиться программирование на Python 3, это очень легко! Если у вас остались вопросы, спрашивайте в комментариях!
На завершение статьи отличная лекция о Python: