Учебный каталог Python
- Использование Python3 под Mac
- Типы данных для изучения Python
- Функция обучения Python
- Расширенные возможности обучения Python
- Функциональное программирование для изучения Python
- Модуль обучения Python
- Объектно-ориентированное программирование для изучения Python
- Расширенное объектно-ориентированное программирование для изучения Python
- Отладка ошибок и тестирование обучения Python
- Программирование ввода-вывода для изучения Python
- Процесс обучения Python и поток
- Регулярность изучения Python
- Общие модули для изучения Python
- 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 Паоло/Боюсь…