Общие модули для изучения Python

искусственный интеллект Python Windows Командная строка

Учебный каталог Python

  1. Использование Python3 под Mac
  2. Типы данных для изучения Python
  3. Функция обучения Python
  4. Расширенные возможности обучения Python
  5. Функциональное программирование для изучения Python
  6. Модуль обучения Python
  7. Объектно-ориентированное программирование для изучения Python
  8. Расширенное объектно-ориентированное программирование для изучения Python
  9. Отладка ошибок и тестирование обучения Python
  10. Программирование ввода-вывода для изучения Python
  11. Процесс обучения Python и поток
  12. Регулярность изучения Python
  13. Общие модули для изучения Python
  14. Python обучение сетевому программированию

Причина, по которой Python называет себя «батарейки в комплекте», заключается в том, что в него встроено множество очень полезных модулей, которые можно использовать напрямую без дополнительной установки и настройки.

常用模块

Часто используемые встроенные модули

datetime

datetime — это стандартная библиотека Python для работы с датами и временем.

>>> from datetime import datetime
>>> dt = datetime(2015, 4, 19, 12, 20) # 用指定日期时间创建datetime
>>> dt.timestamp() # 把datetime转换为timestamp
1429417200.0

Обратите внимание, что временная метка Python представляет собой число с плавающей запятой. Если есть десятичные знаки, десятичные знаки представляют количество миллисекунд.

collections

collections — это модуль коллекций, встроенный в Python, который предоставляет множество полезных классов коллекций.

namedtuple

>>> from collections import namedtuple
>>> Point = namedtuple('Point', ['x', 'y'])
>>> p = Point(1, 2)
>>> p.x
1
>>> p.y
2

namedtupleэто функция, которая создает пользовательскийtupleобъект и указываетtupleКоличество элементов, на которые можно ссылаться по атрибутам, а не по индексам.tupleэлемент .

Таким образом, мы используемnamedtupleОчень удобно определить тип данных, который имеет инвариантность кортежа и на него можно ссылаться по атрибутам, что очень удобно в использовании.

deque

использоватьlistПри хранении данных доступ к элементам по индексу выполняется быстро, но вставка и удаление элементов происходит медленно, потому чтоlistЭто линейное хранилище, когда объем данных большой, эффективность вставки и удаления очень низкая.

deque — это двусторонний список для эффективной реализации операций вставки и удаления, подходящий для очередей и стеков:

>>> from collections import deque
>>> q = deque(['a', 'b', 'c'])
>>> q.append('x')
>>> q.appendleft('y')
>>> q
deque(['y', 'a', 'b', 'c', 'x'])

dequeВ дополнение к списку реализацииappend()иpop()Кроме того, он также поддерживаетappendleft()иpopleft(), поэтому вы можете очень эффективно добавлять или удалять элементы из заголовка.

defaultdict

>>> from collections import defaultdict
>>> dd = defaultdict(lambda: 'N/A')
>>> dd['key1'] = 'abc'
>>> dd['key1'] # key1存在
'abc'
>>> dd['key2'] # key2不存在,返回默认值
'N/A'

Обратите внимание, что значение по умолчанию возвращается при вызове функции, и функция создаетсяdefaultdictобъект при передаче.

В дополнение к возврату значения по умолчанию, когда ключ не существует,defaultdictдругое поведение иdictточно такой же.

OrderedDict

использоватьdict, Ключ неупорядочен. справаdictПри выполнении итерации мы не можем определить порядок ключей.

Если вы хотите сохранить порядок ключей, вы можете использоватьOrderedDict:

>>> from collections import OrderedDict
>>> d = dict([('a', 1), ('b', 2), ('c', 3)])
>>> d # dict的Key是无序的
{'a': 1, 'c': 3, 'b': 2}
>>> od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
>>> od # OrderedDict的Key是有序的
OrderedDict([('a', 1), ('b', 2), ('c', 3)])

Уведомление,OrderedDictКлючи будут отсортированы в порядке вставки, а не сами ключи:

>>> od = OrderedDict()
>>> od['z'] = 1
>>> od['y'] = 2
>>> od['x'] = 3
>>> list(od.keys()) # 按照插入的Key的顺序返回
['z', 'y', 'x']

OrderedDictМожет быть реализован FIFO (первый пришел, первый вышел) dict.Когда емкость превышает предел, самый ранний добавленный ключ удаляется первым:

from collections import OrderedDict

class LastUpdatedOrderedDict(OrderedDict):

    def __init__(self, capacity):
        super(LastUpdatedOrderedDict, self).__init__()
        self._capacity = capacity

    def __setitem__(self, key, value):
        containsKey = 1 if key in self else 0
        if len(self) - containsKey >= self._capacity:
            last = self.popitem(last=False)
            print('remove:', last)
        if containsKey:
            del self[key]
            print('set:', (key, value))
        else:
            print('add:', (key, value))
        OrderedDict.__setitem__(self, key, value)

Counter

Counterпредставляет собой простой счетчик, например, подсчитывающий количество вхождений символа:

>>> from collections import Counter
>>> c = Counter()
>>> for ch in 'programming':
...     c[ch] = c[ch] + 1
...
>>> c
Counter({'g': 2, 'm': 2, 'r': 2, 'a': 1, 'i': 1, 'o': 1, 'n': 1, 'p': 1})

CounterНа самом деле такжеdictПодкласс вышеприведенных результатов можно увидеть, что символ'g','m','r'Каждый появляется дважды, а остальные символы появляются один раз.

base64

Base64 — это способ представления произвольных двоичных данных в 64 символа.

Кодировка Base64 преобразует 3-байтовые двоичные данные в 4-байтовые текстовые данные, увеличивая длину на 33%.Преимущество заключается в том, что закодированные текстовые данные могут отображаться непосредственно в теле электронных писем, веб-страниц и т. д.

Что, если двоичные данные, которые нужно закодировать, не кратны 3, и в конце останется 1 или 2 байта? Для Base64\x00После того, как байты будут дополнены в конце, добавьте 1 или 2 в конце кодировки.=Число указывает, сколько байт добавлено, и оно будет автоматически удалено при декодировании.

>>> import base64
>>> base64.b64encode(b'binary\x00string')
b'YmluYXJ5AHN0cmluZw=='
>>> base64.b64decode(b'YmluYXJ5AHN0cmluZw==')
b'binary\x00string'

struct

structмодуль для решенияbytesи другие преобразования двоичных типов данных,structизpackфункция преобразует любой тип данных вbytes:

>>> import struct
>>> struct.pack('>I', 10240099)
b'\x00\x9c@c'

packПервый параметр — это инструкция обработки,'>I'означает:

>Указывает, что порядок байтов является обратным порядком байтов, то есть сетевым порядком.IПредставляет 4-байтовое целое число без знака. '

hashlib

Хеш-библиотека Python предоставляет общие алгоритмы дайджеста, такие как MD5, SHA1 и другие.

Мы используем общий алгоритм дайджеста MD5 в качестве примера для вычисления значения MD5 строки:

import hashlib

md5 = hashlib.md5()
md5.update('how to use md5 in python hashlib?'.encode('utf-8'))
print(md5.hexdigest())

Результаты расчета следующие:

d26a53750bc40b38b65a520292f69306

Также есть множество часто используемых встроенных модулей, таких как: hmac, itertools, contextlib, urllib, XML, HTMLParser

Распространенные сторонние модули

Помимо встроенных модулей, в Python есть большое количество сторонних модулей.

В принципе, все сторонние модули будут вPyPI - the Python Package IndexЗарегистрируйтесь на , если вы найдете соответствующее имя модуля, вы можете установить его с помощью pip.

Кроме того, вУстановить сторонние модулираздел, мы настоятельно рекомендуем установитьAnaconda, после установки готовы десятки часто используемых сторонних модулей, не нужно вручную устанавливать pip.

Pillow

PIL: Python Imaging Library, которая де-факто уже является стандартной библиотекой обработки изображений для платформы Python. PIL очень мощен, но API очень прост и удобен в использовании.

Поскольку PIL поддерживает только Python 2.7 и находится в аварийном состоянии, группа добровольцев создала совместимую версию на основе PIL под названиемPillow, поддерживает последнюю версию Python 3.x и добавляет множество новых функций, поэтому мы можем установить и использовать Pillow напрямую.

Установить подушку

Подушка уже доступна, если установлена ​​Anaconda. В противном случае его необходимо установить через pip из командной строки:

$ pip install pillow

Если вы столкнетесьPermission deniedУстановка не удалась, добавьтеsudoПовторить.

Управление изображениями

Давайте рассмотрим наиболее распространенные операции масштабирования изображения, написав всего три-четыре строки кода:

from PIL import Image

# 打开一个jpg图像文件,注意是当前路径:
im = Image.open('test.jpg')
# 获得图像尺寸:
w, h = im.size
print('Original image size: %sx%s' % (w, h))
# 缩放到50%:
im.thumbnail((w//2, h//2))
print('Resize image to: %sx%s' % (w//2, h//2))
# 把缩放后的图像用jpeg格式保存:
im.save('thumbnail.jpg', 'jpeg')

Доступны и другие функции, такие как нарезка, поворот, фильтрация, вывод текста, цветовая палитра и т. д.

Например, эффект размытия — это тоже всего несколько строк кода:

from PIL import Image, ImageFilter

# 打开一个jpg图像文件,注意是当前路径:
im = Image.open('test.jpg')
# 应用模糊滤镜:
im2 = im.filter(ImageFilter.BLUR)
im2.save('blur.jpg', 'jpeg')

requests

Используется для доступа к сетевым ресурсам.

запросы на установку

Если Anaconda установлена, запросы уже доступны. В противном случае его необходимо установить через pip из командной строки:

$ pip install requests

Если вы столкнулись с ошибкой установки «Отказано в доступе», добавьте sudo и повторите попытку.

использовать запросы

Для доступа к странице через GET требуется всего несколько строк кода:

>>> import requests
>>> r = requests.get('https://www.douban.com/') # 豆瓣首页
>>> r.status_code
200
>>> r.text
r.text
'<!DOCTYPE HTML>\n<html>\n<head>\n<meta name="description" content="提供图书、电影、音乐唱片的推荐、评论和...'

Для URL-адресов с параметрами передайте словарь какparamsпараметр:

>>> r = requests.get('https://www.douban.com/search', params={'q': 'python', 'cat': '1001'})
>>> r.url # 实际请求的URL
'https://www.douban.com/search?q=python&cat=1001'

запросы автоматически определяет кодировку, вы можете использоватьencodingПросмотр недвижимости:

>>> r.encoding
'utf-8'

Независимо от того, является ли ответ текстовым или бинарным, мы можем использоватьcontentприобретение собственностиbytesОбъект:

>>> r.content
b'<!DOCTYPE html>\n<html>\n<head>\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\n...'

Удобство запросов еще и в том, что для определенных типов ответов, например JSON, можно получить напрямую:

>>> r = requests.get('https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20%3D%202151330&format=json')
>>> r.json()
{'query': {'count': 1, 'created': '2017-11-17T07:14:12Z', ...

Когда нам нужно передать заголовок HTTP, мы передаем dict какheadersпараметр:

>>> r = requests.get('https://www.douban.com/', headers={'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit'})
>>> r.text
'<!DOCTYPE html>\n<html>\n<head>\n<meta charset="UTF-8">\n <title>豆瓣(手机版)</title>...'

Чтобы отправить POST-запрос, просто введитеget()метод становитсяpost(), затем пройти вdataПараметры в качестве данных для POST-запроса:

>>> r = requests.post('https://accounts.douban.com/login', data={'form_email': 'abc@example.com', 'form_password': '123456'})

запросы используют по умолчаниюapplication/x-www-form-urlencodedКодировать POST-данные. Если вы хотите передать данные JSON, вы можете напрямую передать параметр json:

params = {'key': 'value'}
r = requests.post(url, json=params) # 内部自动序列化为JSON

Точно так же для загрузки файлов требуется более сложный формат кодирования, но запросы упрощают его доfilesпараметр:

>>> upload_files = {'file': open('report.xls', 'rb')}
>>> r = requests.post(url, files=upload_files)

При чтении файлов обязательно используйте'rb'То есть читается бинарный режим, и полученныйbytesДлина — это длина файла.

Пучокpost()метод заменен наput(),delete()и так далее, вы можете запрашивать ресурсы способом PUT или DELETE.

В дополнение к возможности легко получить содержимое ответа, запросы также очень просты для получения другой информации об ответе HTTP. Например, чтобы получить заголовки ответа:

>>> r.headers
{Content-Type': 'text/html; charset=utf-8', 'Transfer-Encoding': 'chunked', 'Content-Encoding': 'gzip', ...}
>>> r.headers['Content-Type']
'text/html; charset=utf-8'

запросы выполняют специальную обработку файлов cookie, чтобы мы могли легко получить указанный файл cookie без разбора файла cookie:

>>> r.cookies['ts']
'example_cookie_12345'

Чтобы передать файлы cookie в запросе, просто подготовьте диктовку для передачи.cookiesпараметр:

>>> cs = {'token': '12345', 'status': 'working'}
>>> r = requests.get(url, cookies=cs)

Наконец, чтобы указать время ожидания, передайте параметр времени ожидания в секундах:

>>> r = requests.get(url, timeout=2.5) # 2.5秒后超时

chardet

Используется для обнаружения кодировки.

установить чарде

Если Anaconda установлена, chardet уже доступен. В противном случае его необходимо установить через pip из командной строки:

$ pip install chardet

Если вы столкнулись с ошибкой установки «Отказано в доступе», добавьте sudo и повторите попытку.

использовать чарде

когда мы получимbytes, кодировка может быть обнаружена. Чтобы обнаружить кодировку с помощью charde, требуется только одна строка кода:

>>> chardet.detect(b'Hello, world!')
{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}

Обнаруженная кодировкаascii, обратите внимание, что есть такжеconfidenceполе, указывающее, что вероятность обнаружения равна 1,0 (т.е. 100%).

Давайте попробуем обнаружить китайский кодированный GBK:

>>> data = '离离原上草,一岁一枯荣'.encode('gbk')
>>> chardet.detect(data)
{'encoding': 'GB2312', 'confidence': 0.7407407407407407, 'language': 'Chinese'}

Обнаруженная кодировкаGB2312, обратите внимание, что GBK является надмножеством GB2312, обе кодировки одинаковые, вероятность правильного обнаружения 74%,languageЯзык, указанный в поле,'Chinese'.

Определить кодировку UTF-8:

>>> data = '离离原上草,一岁一枯荣'.encode('utf-8')
>>> chardet.detect(data)
{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}

Попробуем еще раз обнаружить японский язык:

>>> data = '最新の主要ニュース'.encode('euc-jp')
>>> chardet.detect(data)
{'encoding': 'EUC-JP', 'confidence': 0.99, 'language': 'Japanese'}

Видно, что использовать charde для обнаружения кодировки просто. Получив кодировку, преобразуйте ее вstr, что может облегчить последующую обработку.

Список кодировок, поддерживаемых charde, можно найти в официальной документации.Supported encodings.

psutil

psutil = утилиты процесса и системы, он может не только осуществлять мониторинг системы с помощью одной или двух строк кода, но также может использоваться на разных платформах, поддерживает Linux/UNIX/OSX/Windows и т. д. и является обязательной необходимостью для системных администраторов. и модуль партнеров по эксплуатации и техническому обслуживанию.

установить psutil

Если Anaconda установлена, psutil уже доступен. В противном случае его необходимо установить через pip из командной строки:

$ pip install psutil

Если вы столкнулись с ошибкой установки «Отказано в доступе», добавьте sudo и повторите попытку.

Получить информацию о процессоре

>>> import psutil
>>> psutil.cpu_count() # CPU逻辑数量
4
>>> psutil.cpu_count(logical=False) # CPU物理核心
2
# 2说明是双核超线程, 4则是4核非超线程

psutil также может получать много полезной системной информации, такой как информация о пользователе, службах Windows и т. д. Подробную информацию см. на официальном веб-сайте psutil:GitHub.com/GIA M Паоло/Боюсь…

Далее: Сетевое программирование для изучения Python