- bottle
- calendar
- collections
- core
- Функции работы с файлами
- map()
- Дата
- Время
- Инициализация даты и времени вместе: datetime()
- flask
- itertools
- os
- pprint
- re
- redis
- shutil
- string
- subprocess
- unicodedata
- zmq
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 преимущества
- Не нужно в конце текста ставить перенос строки
- Не нужно добавлять разделитель пробел если надо записать какой-то список
Пример
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 (разветвление на входе)
Ссылки
- дока - https://zguide.zeromq.org/