#!/usr/bin/env python
Справочная система
Получить справку по имени (ключевому слову, функции, пакету, ...):
pydoc3 <имя>
Запустить веб-сервер на свободном порту и открыть заглавную страницу документации в браузере:
pydoc3 -b
*** ipython notebook
ipython - удобная оболочка для работы с интерпретатором. Имеет подсветку синтаксиса, автодополнение и множество других преимуществ перед Python shell. Работа в этой оболочке похожа на работу в математических пакетах (Mathematica, Maxima). [IPython: замена стандартного Python shell]
ipythone notebook - удобная среда для работы с ipython в браузере. Часто используется при научных и инженерных вычислениях, интегрируется с matplotlib, позволяя отображать графики в том же окне, после вызывающего блока.
комманда запуска: ipython notebook
зайти из браузера на сервер: http://127.0.0.1:8888
включить интеграцию matplotlib:
При необходимости установить размер и разрешение графиков%matplotlib inline
В ipython notebook картинка может сжиматься до очень маленького размера, если её фактические размеры слишком велики.figure(figsize = (8,4), dpi=300) # размеры в дюймах # установить размер шрифтов на графиках matplotlib.rcParams.update({'font.size': 16})
***
Использовать utf-8 символы в скрипте [so]:# -*- coding: utf-8 -*-
***
Версия интерпретатора [so]
import sys >>> sys.version # строка содержащая информацию о версии >>> sys.version_info # то же самое только в кортеже
Запустить скрипт в интерактивном режиме
Выполнить скрипт, а после открыть консоль после завершения последней операции. Таким образом, можно пользоваться результатами выполнения скрипта.
python -i script.py
***
Передать код параметром интерпретатора
python -c "print('Hello World')"
Операторы можно разделять точкой с запятой.
Установить зависимости из requirements.txtpip install -r requirements.txt***
Установить пакет из скрипта. Скрипт должен быть запущен с правами суперпользователя.
import pip pip.main(['install', 'python-registry']) # установка пакета python-registry
Профилирование [wiki]
python -m cProfile -s test <script.py>
Модуль cProfile замеряет время выполнения функций и число вызовов. Данные выводятся в табличном виде.
14417410 function calls (14416960 primitive calls) in 7.394 seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
1000000 3.511 0.000 5.614 0.000 my-script.py:31(my_favorite_foo)
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
1000000 3.511 0.000 5.614 0.000 my-script.py:31(my_favorite_foo)
ncalls - число вызовов;
tottome - общее время работы (без учёта вызовов подпрограмм?);
percall - tottome / ncalls;
cumtime - общее время работы;
percall - cumtime / ncalls.
Подробнее: Profiling python with cProfile
vprof
- несколько более медленный профилировщик, который однако выдаёт более
наглядный результат. Программа создаёт в том числе тепловую карту кода,
кодируя цветом время выполнения отдельных фрагментов кода.
После завершения работы python программы будет запущен веб-сервер и показаны разельтаты измерения работы программы. Страница с информацией автоматически откроется в браузере.
После завершения работы python программы будет запущен веб-сервер и показаны разельтаты измерения работы программы. Страница с информацией автоматически откроется в браузере.
Отладка
Встроенный режим отладки есть во многих IDE, включая PyCharm. Однако, можно не прибегая к сторонним средствам воспользоваться встроенным интерактивным консольным отладчиком pdb. Для этого достаточно подключить его как модуль при запуске скрипта:
python3 -m pdb <script>
Программа запустится на выполнение, которое будет приостановлено после первой же инструкции. Список основных команд отладчика можно получить напечатав h. Остальные команды также лаконичны (small cheatsheet):
l - показать окрестности текущей строки
n - step over, next - выполнить следующую строку
s - step into - то же самое, только с входом в функции
c - continue - выполнять до точки останова
b - показать точки останова
b 123 - установить точку останова в строке 123
cl - удалить все точки останова
cl 2 - удалить точку останова с номером 2.
from collections import namedtuple Body = namedtuple('Body', 'm v') b = Body(5, 7) E = b.m * b.v**2 / 2 E = b[0] * b[1]**2 / 2 m, v = b
Отдельные поля менять не позволяется, вместо этого можно создать новый кортеж:
***
p = Point(x=11, y=22) p2 = p._replace(x=33)
***
Красиво напечатать список состоящий их строк:
В результате: print(', '.join(['one', 'two', 'three']))
one, two, three
Строка для который вызывается метод join является разделитем. После последнего элемента списка разделитель не ставится.
Часто этот способ нужен для того, чтобы отформатировать на печеати числа с плавающей точкой:
lst = [11.334000000000001, 17.058000000000003, 22.782000000000004, 28.506000000000004, 34.230000000000004] print(', '.join(map(lambda x: "%2.3f"%x, lst)))
Вывод:
11.334, 17.058, 22.782, 28.506, 34.230
Итератор map применяет к каждому элементу списка lst функцию, что передаётся первым параметром. В примере лямбда-функция в свою чоредь, превращает каждое число из списка lst в строку, которая и передаются уже методу join.
Генераторы списков.
Лаконичный и элегантный способ создать список:
Сложить элементы двух списков попарно:numbers = [1,2,3,4,5] squares = [number*number for number in numbers]
T = [21.036, 31.357, 41.489, 51.442, 61.227] S = [11.334, 17.058, 22.782, 28.506, 34.230] ST = [s + t for s, t in zip(S, T)]
***
Скрипт запущен под рутом?
if os.getuid()==0:print "user is root" else:
print "user is not root"
На счёт переносимости этого кода есть разные мнения, как и на счёт самих способов проверить обладает ли правами суперпользователя скрипт stackoverflow.
***
Проверить синтаксис скрипта без его выполнения [SO]:
python -m py_compile script.py
Параметры скрипта
Получить параметры с которыми скрипт был запущен:
if len(sys.argv): param1 = sys.argv[1]
getopt
Скрипт обрабатывает ключи -h, ключи требующие параметра (параметрические) -f и -t (во втором параметре конструктора getopt за этими параметрами следует двоеточие ":"); а также длинные параметрические ключи --file и --text:
import getopt # объявление и чтение параметров (ключей) скрипта try: opts,args = getopt.getopt(sys.argv[1:],"hf:t:",["file","text"]) except getopt.GetoptError: print('invalid params') # обработка ключей opt и их параметров arg for opt,arg in opts: if opt=='-h': print(HELP) elif opt in ("-f", "--ifile"): ifile=arg # ... elif opt in ("-t", "--text"): text=arg # ...
Работа с ini файлами (файлами конфигурации) [SO]
import configparser config = configparser.ConfigParser() config.read('FILE.INI') print(config['DEFAULT']['path']) # -> "/path/name/" config['DEFAULT']['path'] = '/var/shared/' # update config['DEFAULT']['default_message'] = 'Hey! help me!!' # create with open('FILE.INI', 'w') as configfile: # save config.write(configfile)
Регулярные выражения [tutorialspoint]
import re line = "Ave Satanas!" reg = re.compile("Ave, [a-zA-Z]*!") if reg.match(line): print("match")
Прочитать пароль со стандартного ввода
import getpass pw = getpass.getpass()
***
Хранить пароли можно в системном хранилище, используя для этого библиотеку keyring:
>>> import keyring
>>> keyring.set_password("system", "username", "password")
>>> keyring.get_password("system", "username")
'password'
Вычислить md5 хэш
import hashlib print(hashlib.md5("whatever your string is".encode('utf-8')).hexdigest())
Процессы и потоки
Из-за использования Global Interpreter Lock в реализации языка CPython потоки фактически вополняются только по одному за раз. Поэтому параллельные вычисления занимают примерно столько же времени сколько и такие же но последовательные.
Выиграть от использование потоком можно только при работе с операциями ввода\вывода, когда можно разделить, например ожидание ввода и одновременное исполнение какого-либо кода [SO].
from time import clock
from math import sqrt
def foo(x):
for i in range(50000000): x = sqrt(i)*n
print("I'm finished: %f"%clock())
return
t1 = threading.Thread(target= foo, args=(7,))
# запуск кода на выполнение
t1.start()
# ожидание завершения потока
t1.join()
***
Запустить процесс и посмотреть, что из этого получится. Например, попробовать извлечь файлы из запароленого 7z архива:import subprocess
filename ="qwerty.7z"
password = "qwerty"
s = subprocess.Popen(["7z", "e", "-p"%password, filename], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
r = s.communicate()[0]
Процессы [doc]
Работа с процессами похожа на работу с потоками:
*** Пулы процессов [link]import multiprocessing def foo(x): print(x) # создание процесса p = multiprocessing.Process(target = foo, args = (1, )) p.start() # запуск p.join() # ожидание завершения
...
*** Queue and Pipes
...
Параллельное программирование в Python при помощи multiprocessing и shared array
Запустить приложение, которое продолжит работу после завершения скрипта:
Popen(["application"], stdout=PIPE, stderr=PIPE, close_fds=True)
***
Читать без блокировок вывод (p.stdout.readline()) процесса [stackoverflow].
***
Завершить приложение:
p = Popen(["application"], stdout=PIPE, stderr=PIPE, close_fds=True) p.kill() p.wait()
***
Найти процесс по имени среди запущенных в системе:
import psutil for proc in psutil.process_iter(): if proc.name == "application": print("application is running")
Сеть и Интернет
Загрузить веб страницуfrom urllib import request resp = request.urlopen("http://google.com") resp.readline() # содержание страницы
Библиотека для работы с XMPP (jabber) - sleekxmpp
Лёгкий (один файл) веб-фреймворк Bottle,
Легкий python веб-фреймворк: Bottle
Для тестирования можно вместо стороннего сервера использовать сервер встроеный в bottle. Функция run() запускает сервер:
from bottle import route, run # функция сработает при запросе страницы hello @route('/hello') def hello(): return "Hello World!" run(host='localhost', port=80, debug=True)
По-умолчанию сервер работает на порту 8080. Для пользования 80-го порта могут потребоваться права суперпользователя.
***
Собрать данные с веб-страницы
Открыть URL в браузре по-умолчанию
import webbrowser webbrowser.open_new('https://google.com')
Автоматизация браузера
mechanize. тестирование сайтов, заполнение и отправка форм, скачивание файлов и т.п.
selenium
Офис
reportlab
Математика в python
***
Pandas
Представляет богатый функционал для обработки данных.
Чтение данных из CSV файла:
Введение в анализ данных с помощью PandasЧтение данных из CSV файла:
pdata = pd.read_csv('file.csv', delimiter=' ') # Получим привычные списки значений по столбцам data = pdata.values.transpose()
read_csv, в отличаи от аналогичных функции numpy, по-умолчанию способена считывать сложные типы данных, такие как время. Numpy же заменит все не числа так и сохранит: Nan. Однако конвертировать, например время, из строки (как сохранит его после прочтения из csv файла pandas) в специальный формат всё же придётся.Getting Started with Pandas: Kaggle's Titanic Competition
Геолокация
По публичному IP.
Будем использовать локальную БД (эту):
import GeoIP gi = GeoIP.open('/usr/share/GeoIP/GeoIPCity.dat', GeoIP.GEOIP_STANDARD) geo = gi.record_by_addr('8.8.8.8')
Теперь geo содержит словарь:
{'area_code': 650,
'city': 'Mountain View',
'country_code': 'US',
'country_code3': 'USA',
'country_name': 'United States',
'dma_code': 807,
'latitude': 37.384498596191406,
'longitude': -122.08809661865234,
'metro_code': 807,
'postal_code': '94040',
'region': 'CA',
'region_name': 'California',
'time_zone': 'America/Los_Angeles'}
Алсо
LearnPython.org interactive Python tutorial
SageMathCloud — мечта для любителей Python, математики и Linux
Ускорение кода на Python средствами самого языка
Ускорение кода на Python средствами самого языка
Ссылки
IPython: замена стандартного Python shellIPython: Built-in magic commands
Python: советы, уловки, хаки [eng]
Scientific Python Tips and Tricks
Программирование и научные вычисления на языке Python
Параллельное программирование в Python при помощи multiprocessing и shared array
Working with Binary Data in Python, 2015
Книги
- Лутц М. Изучаем Python, 4-е издание, 2011, 1280 с.; (вышло 5-е издание?). В книге приводится практически полное описание языка, от простого к сложному.
- Лутц М. Программирование на Python, том I,II, 4-е издание, 2011. Дополнение к предыдущей книге, рассматриваются популярные пакеты, посвящена практике программирования на Python.
- Gray Hat Python: Python Programming for Hackers and Reverse Engineers; Violent Python - A Cookbook for Hackers, Forensic Analysts, Penetration Testers and Security Engineers; Книга поясвящённая вопросам информационной безопасности, практически полностью состоит из примеров.
Подсветка синтаксиса highlight.hohli.com
Casino Online – How to Download and Play Slots - DrmCD
ОтветитьУдалитьAt the beginning of 안양 출장마사지 the year, many casino slots were released and 서산 출장안마 some slot 영주 출장샵 games were available 경산 출장마사지 for free online. 순천 출장안마 However, there are more games that are available on