Модули по работе с Python


bottle

Created: Feb 16, 2021 6:29 PM tag: веб Описание: http веб-сервер

Запуск сервера: run

Параметры:

  • host [str] -
  • port [int] -
  • debug [bool] -
  • reloaded [bool] -

static_file

calendar

Created: Feb 22, 2021 1:39 PM tag: время

Узнать високосный ли год: isleap


import calendar

print(calendar.isleap(2021))
# False

print(calendar.isleap(2020))
# True

collections

Created: Jan 31, 2021 5:07 PM

  • namedtuple

core

Created: Feb 23, 2021 4:25 PM Описание: Модуль с базовыми функциями

Напечатать значение на экран: print()


print(values, ..., sep=' ', end='\n', file=sys.output, flush=False)

Входящие параметры

  • values - Список параметров которые нужно вызвать. У объектов вызывает метод str
  • sep - разделитель параметров. default = пробел
  • end - последний символ при печати. default = перенос строки
  • file - файловый дескриптор куда выводится текст. default = консоль
  • flush - ?

Возвращает - None

Пример


print('hello, world')

$ python3 ./script.py
hello, world

Функции работы с файлами

Открыть файл: open()


fileobj = open(filename, mode)
  • fileobj - объект файла (файлхендлер?)
  • filename - путь до файла
  • mode - тип файла и действие над файлом. Первая буква - операция
    • r - чтение. По умолчанию. Если файла нет, будет исключение
    • w - запись. Если файл не существует, то будет создан. Если существует - перезаписан
    • x - запись, но только если файл не существует
    • a - запись в конец если существует
  • Вторая буква - тип файла
    • t - текстовый файл
    • b - бинарный

file = open('text.txt', 'rt')

Записать в файл: write()



Пример


text = '''\
Я инженер на сотню рублей,
И больше я не получу.
Мне двадцать пять, и я до сих пор
Не знаю, чего хочу.\
'''

file = open('text.txt', 'wt')
file.write(text)

write vs print

Записать в файл можно и через обычный print, но у print есть 2 преимущества

  1. Не нужно в конце текста ставить перенос строки
  2. Не нужно добавлять разделитель пробел если надо записать какой-то список

Пример


just_list = ['test1', 'test2']

file_print = open('print.txt', 'wt')
print(*just_list, file=file_print)

file_write = open('write.txt', 'wt')
file_write.write(','.join(just_list))

$ python3 ./script.py && cat ./print.txt && cat ./write.txt 
test1 test2
test1,test2

Закрыть файл: close()

map()

  • Синтаксис

result = map(func, list)
  • func - функция которая вызывается для каждого эл. списка. Обязательный
  • list - итерируемый объект. Обязательный, может быть несколько
  • Если несколько list, то итерируется до самого короткого

  • Примеры

# map с использованием lambda
numbers = [2, 3, 6, 6, 5]
map_numbers = list(map(lambda x: x * 2, numbers))

print(numbers)
print(map_numbers)
# [2, 3, 6, 6, 5]
# [4, 6, 12, 12, 10]

aquarium_creatures = [
    {"name": "sammy", "species": "shark", "tank number": 11, "type": "fish"},
    {"name": "ashley", "species": "crab", "tank number": 25, "type": "pythonfish"},
    {"name": "jo", "species": "guppy", "tank number": 18, "type": "fish"},
    {"name": "jackie", "species": "lobster", "tank number": 21, "type": "pythonfish"},
    {"name": "charlie", "species": "clownfish", "tank number": 12, "type": "fish"},
    {"name": "olly", "species": "green turtle", "tank number": 34, "type": "turtle"}
]

# map с пользовательской функцией

def assign_to_tank(aquarium_creatures, new_tank_number):
    def apply(x):
        x["tank number"] = new_tank_number
        return x
    return map(apply, aquarium_creatures)

pprint(aquarium_creatures)
assign = assign_to_tank(aquarium_creatures, 42)
pprint(list(assign))

# map со встроенными функциями

numbers = [1, 2, 3, 4]
powers = [3, 4, 6, 1]

power_numbers = map(pow, numbers, powers)
print(list(power_numbers))
# [1, 16, 729, 4]
  • Ссылки
    • Использование функции map в Python - [https://www.digitalocean.com/community/tutorials/how-to-use-the-python-map-function-ru

    #реализация-определяемой-пользователем-функции](https://www.digitalocean.com/community/tutorials/how-to-use-the-python-map-function-ru

    #%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D1%8F%D0%B5%D0%BC%D0%BE%D0%B9-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%BC-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8)# datetime

Created: Feb 22, 2021 1:39 PM tag: время Описание: Модуль по работе с датой и временем

Дата

Создать дату: date


from datetime import date

today = date(2021, 2, 22)

print(today)
# 2021-02-22

Обращение к дате по отдельности: year, month, day


print("day =", today.day, "month =", today.month, "year =", today.year)
# day = 22 month = 2 year = 2021

Текущая дата: date.today()


from datetime import date

now = date.today()

print(now)
# 2021-02-22

Добавить дельту к дате: timedelta()


from datetime import date, timedelta

now = date.today()

print(now)
# 2021-02-22

one_day = timedelta(days=1)

print(now + one_day)
# 2021-02-23

print(now + one_day * 7)
# 2021-03-01

Время

Инициализация времени: time


from datetime import time

now = time(13, 53)

print(now)
# 13:53:00

print("hour =", now.hour, "minute =", now.minute, "second =", now.second)
# hours = 13 minute = 53 seconds = 0

Инициализация даты и времени вместе: datetime()


from datetime import datetime

now = datetime.now()

print(now)
# 2021-02-22 13:57:24.470408

print("day =", now.day, "month =", now.month, "year =", now.year,
      "hour =", now.hour, "minute =", now.minute, "second =", now.second)
# day = 22 month = 2 year = 2021 hour = 14 minute = 3 second = 56

Объединить объекты date и time в datetime: combine()


from datetime import date, time, datetime

date = date.today()
time = time(12)

datetime = datetime.combine(date, time)

print(datetime)
# 2021-02-22 12:00:00

flask

Created: Feb 16, 2021 6:34 PM tag: веб Описание: http веб сервер. Чуть лучше bottle :)

Установка


pip3 install flask

itertools

Created: Jan 31, 2021 5:07 PM

Объединить объекты разных типов в один итерабельный список: chain


import itertools

for item in itertools.chain(['a', 'b', True], ('1', '2'), {'alarm', 'test'}, {'test1': 1, 'test2': 2}):
    print(item)

$ python3 ./test.py 
a
b
True
1
2
alarm
test
test1
test2

Создать бесконечный список: cycle


import itertools

for item in itertools.cycle(['a', 'b', True]):
    print(item)

a
b
True
...
...

Сложить и запомнить значение: accumulate

Функция accumulate вызывается для каждого эл в списке и складывает (по умолчанию) с ее текущим состоянием


import itertools

numbers = [1,2,3,4]

for item in itertools.accumulate(numbers):
    print(item)

$ python3 ./test.py 
1
3
6
10

Можно переопределить сложение


#!/usr/bin/env python3

import itertools

def multiply(a, b):
    result = a * b
    print("Элемент a =", a, "Элемент b =", b, "Результат a * b=",result)
    return result

numbers = [1,2,3,4]

for item in itertools.accumulate(numbers, multiply):
    print(item)

$ python3 ./test.py 
1
Элемент a = 1 Элемент b = 2 Результат a * b= 2
2
Элемент a = 2 Элемент b = 3 Результат a * b= 6
6
Элемент a = 6 Элемент b = 4 Результат a * b= 24
24

os

Created: Feb 19, 2021 5:41 PM Описание: Модуль для работы с ОС (Операционной Системой)

Проверка существования файла (или директории): exists


import os

file_name = './text.txt'

with open(file_name, 'wt') as file:
    file.write('hello\n')

print("File exists? ", os.path.exists(file_name))
# File exists?  True

print("File exists? ", os.path.exists('alalala'))
# File exists?  False

Получить PID запущенного процесса: os.getpid()


import os
print(os.getpid())

$ python3 ./test.py 
10755
$ python3 ./test.py 
10756
$ python3 ./test.py 
10763
$

>>> import os
>>> os.getpid()
10846
>>> os.getpid()
10846
>>>
  • т.к. процесс еще жив, pid не меняется

Получить путь до текущей рабочей диры: os.getcwd()


import os
print(os.getcwd())

$ python3 ./test.py 
/home/avis/develop/learn/python/book-simple-python

Получить UID и GID (id юзера и id группы): getuid(), getgid()


>>> os.getuid()
1000
>>> os.getgid()
1000
>>>

pprint

Created: Jan 31, 2021 5:07 PM

re

Created: Feb 4, 2021 7:51 PM Описание: Модуль по работе с регулярными выражениями

  • match
  • findall
  • search
  • compile
  • split
  • sub

redis

Created: Feb 14, 2021 4:13 PM Описание: Модуль для работы с redis-ом

Установка


pip install redis
  • Запуск сервиса и проверка

docker run --rm -d --name redis --net=host redis

import redis

redis = redis.Redis(host='localhost', port=6379)
redis.set('test1', 1)
print(redis.get('test1'))

b'1'

Строки

Записать строку: set


bool = redis.set(key, value)

print(redis.set('test1', 1))

True

Получить строку из редиса: get


bytes = redis.get(key)

print(redis.get('test1'))

b'1'

shutil

Created: Feb 19, 2021 5:54 PM

Копирование файла: shutil.copy


import os
import shutil

file_name = './text.txt'
new_file_name = file_name + 'new.txt'

with open(file_name, 'wt') as file:
    file.write('hello\n')

shutil.copy(file_name, new_file_name)
print(os.path.exists(new_file_name))

string

Created: Feb 4, 2021 8:14 PM

subprocess

Created: Feb 19, 2021 6:18 PM Описание: Работа с процессами

todo

  • getoutput
  • check_output()
  • subprocess.getstatusoutput(‘date’)
  • subprocess.call(‘date’)# time

Created: Feb 22, 2021 1:40 PM tag: время

unicodedata

Created: Feb 3, 2021 7:29 PM

zmq

Created: Feb 23, 2021 4:25 PM tag: веб Описание: Фреймворк по работе с сетями через сокеты

Режимы работы

  • REQ (синхронный запрос)
  • REP (синхронный ответ)
  • DEALER (асинхронный запрос)
  • ROUTER (асинхронный ответ)
  • PUB (публикация)
  • SUB (подписка)
  • PUSH (разветвление на выходе)
  • PULL (разветвление на входе)

Ссылки