Python Coockbook


Чернетка! Стаття не завершена...

Работа с текстом

Транслит с кириллицы на латиницу:

print unidecode('текст на русском')

Преобразование кодировок в UTF-8:

print unicode('текст в какой-то кодировке', 'UTF-8')

Преобразование содержимого файла file в UTF-8:

import codecs
txtfile = codecs.open(file, "r", "utf-8")
data = txtfile.read()
txtfile.close()

Списки, словари, множества

Копирование словаря

# variant 1:
dict2 = dict(dict1)
# variant 2:
dict2 = dict1.copy()

Копирование списка

x = [1,2,3]
y = x[:]

Копирование вложенных списков/словарей

import copy
dict = {'a': [1, 2, 3], 'b': [4, 5, 6]}
copy_dict = copy.deepcopy(my_dict)

Взято отсюда: Python: вещи, которых вы могли не знать

Comprehension

list_a = [-2, -1, 0, 1, 2, 3, 4, 5]
list_b = [x for x in list_a]
list_b = [x for x in list_a if x % 2 == 0]                          # Условие для фильтрации
list_b = [x for x in list_a if x % 2 == 0 and x > 0]                # Условие для фильтрации с логическими операторами
list_b = [x if x < 0 else x**2 for x in list_a]                     # Ветвление выражения
list_b = [x**3 if x < 0 else x**2 for x in list_a if x % 2 == 0]    # Комбинирование фильтрации и ветвления

matrix = [[0, 1, 2, 3],
          [10, 11, 12, 13],
          [20, 21, 22, 23]]
flattened = [n for row in matrix for n in row]                      # Двумерный список
matrix = [[0 for x in range(4)] for y in range(5)]                  # Создание двумерной матрицы 4х5

dict_abc = {'a': 1, 'b': 2, 'c': 3, 'd': 3}
dict_123 = {v: k for k, v in dict_abc.items()}                      # Генератор словаря
dict_a = dict((x, x ** 2) for x in list_a)

list_a = [-2, -1, 0, 1, 2, 3, 4, 5]
my_str = ''.join(str(x) for x in list_a)                            # Генератор строк

Взято отсюда: Python: коллекции, часть 4/4

ООП

Возможность обращения к объекту как к словарю: register[name] или как обычно register.name

class DotDict(dict):
    __getattr__ = dict.get
    __setattr__ = dict.__setitem__
    __delattr__ = dict.__delitem__

dot.notation access to dictionary attributes

class DotDict(dict):
    __getattr__ = dict.get
    __setattr__ = dict.__setitem__
    __delattr__ = dict.__delitem__

color = DotDict( {'OffLine':'#808080', 'PowerOff':'#bd6d6c', 'Machining':'#75d874', 'Settings':'#7b9ce1', 'Idle':'#e0bc78', 'Undefined':'#FAFAFA'} )
print(color['PowerOff'], color.Machining)

multiprocessing - передача аргументов

from multiprocessing import Process, Value

def f1(x,y):
    while True:
        x.value, y.value = random.randint(1,10), random.randint(100,1000)
        time.sleep(1.0)

def f2(z):
    while True:
        z.value = random.randint(40,50)
        time.sleep(1.0)


if __name__ == '__main__':

    x = Value('d', 100.0)
    y = Value('d', 100.0)
    p1 = Process(target=f1, args=(x,y))
    p1.start()

    z = Value('d', 100.0)
    p2 = Process(target=f2, args=(z))
    p2.start()

    #p1.join()
    #p2.join()

    while True:
        print(x.value, y.value, z.value)
        time.sleep(1.0)

install

sudo apt-get install python3-pip
sudo pip3 install flask

# Ставим wsgi именно для Python 3, он заменяет версию для Python 2 и обратно:

sudo apt-get install libapache2-mod-wsgi-py3

# На всякий случай если не подключился модуль на автомате:

sudo a2enmod wsgi

Округление до целого

def myround(x, base=7):
    return int(base * round(float(x)/base))

a=[1,10,15,13,45,75,16,17,18,19,20]
for b in a:
    print(myround(b,7))