其实这个是Library Reference的内容
- Dictionaries
使用del可以删除一个key
list(d)可以把Dictionaries的keys按照插入的顺序输出 python3.7新特性. 使用时注意版本是否支持
a_dict = {'foo': 'bar', 'my': 'a-only'}
b_dict = {'foo': 'b', 'you': 'b-only'}
a_dict.update(b_dict)
>>> a_dict
{'foo': 'b', 'my': 'a-only', 'you': 'b-only'}
- 9.8 Iterators
定义一个iter会返回一个class(拥有__next__方法). 如果这个iterator自己有__next__方法,他可以返回self
for的功能就是调用object的__iter__
函数 - 9.9 Generators
在函数里添加yield来使得这个函数变成iterators
- 自动创建
__iter__, __next__
函数 - 每次执行next时自动更新,免去手动设置
self.data, self.index
- 不返回时,自动
raise StopIteration
- 自动创建
setup.py
示例:
from setuptools import setup
setup(
# 必选
name="包名",
version="0.0.1",
# 可选
package_data = {
'': ['*.png', '*.json'], # 把包里面的png和json放入包
},
data_files=[('README.md', ['README.md'])],
install_requires=[
'<dependency_name> @ git+ssh://git@github.com/<user>/<repo_name>@<ref>', # 依赖一个git仓库
]
)
- 发布
python3 setup.py sdist bdist_wheel
twine upload dist/*
- 安装:
pip3 install beautifulsoup4
- 文档整理
示例 生成验证码
安装: pip install datetime-month
from month import XMonth
month = XMonth(2022, 11)
month.first_day()
比较文字不同
数字货币的类
faker use fake to create a lot of name of text
from faker import Faker
f = Faker('zh_cn')
print(f.name(), f.address(), f.text())
f.profile(['ssn', 'birthdate'])
$ faker address
$ faker name
$ faker password
flask 轻量级http服务器
转化尺寸
很好用的邮件客户端
非常好用的交互式shell
-
在
~/.ipython/profile_default/startup/
下创建脚本可以默认import一些包 -
itchat 微信机器人
-
[iptools] 处理IP地址的包
>>> jmespath.search("foo.bar", {"foo": {"bar": "baz"}})
'baz'
- jinja模板渲染
- kafka 用于kafka的消息分发
from kafka import KafkaConsumer consumer = KafkaConsumer('test',bootstrap_servers='192.168.1.191') for msg in consumer: print(msg) from kafka import SimpleProducer, SimpleClient kafka_client = SimpleClient('192.168.1.191') kafka_producer = SimpleProducer(kafka_client, async=False) kafka_producer.send_messages('test',b'test')
操作mysql数据库的包
- 安装
sudo apt-get install python3-dev default-libmysqlclient-dev build-essential
sudo pip3 install mysqlclient
- 运行
from MySQLdb.connections import Connection
db = Connection(db="test")
c = db.cursor()
res = c.execute("select * from pets");
print(c.fetchall())
>>> ((1, 'cat'), (2, 'cat'), (3, 'dogs'), (13, 'dog'), (14, 'dog'), (15, 'dog'), (21, 'dog'), (22, 'dog'))
res = c.execute("insert into pets values (null, 'dog')");
# 注意即使没有commit, 数据库id也会自增. 如果一次没有commit, 下次commit时,id就不是连续的了
db.commit()
# 使用连接池
https://github.com/discover-python-channel/youtube-content/blob/main/mysql_connection_pooling/python/import_fake_data.py
from mysql.connector import pooling
cnxpool = pooling.MySQLConnectionPool(pool_name="poolname", pool_size=20. autocommit=True, username...)
connection = cnxpool.get_connection()
cursor = connection.cursor()
cursor.execute(sql)
画图工具
imoprt matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4]) # 默认x轴是0, 1, 2, 3
plt.plot([2, 3, 4, 5], [2, 2, 3, 4])
plt.ylabel('some numbers')
plt.show()
mongoengine 把mongodb当作sql用。那你为什么不直接用mysql啊
- moviewpy 操作mp4的包
from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip
# 截取前5秒的mp4文件
ffmpeg_extract_subclip("movie.mp4", 0, 5, targetname="test.mp4")
>>> numpy.linspace(0, 100, 3, dtype='int')
array([0, 50, 100])
有顺序的set, 实现原理其实就是用一个class内部保存一个list和一个set.
我尝试用dict来做(python现在dict的key是有顺序的),但是他的key不太方便做index顺序索引.
但是他内部是先判断是否存在,后插入的, 会不会遇到多线程导致key重复的问题呢?
会的, 参考代码 在sorted_set的add函数里加入一个time.sleep可以发现, 不加的话估计要很大的高并发才能出现
sudo pip3 install ordered-set
from ordered_set import OrderedSet
a = OrderedSet()
a.add(3)
a.update([5, 1, 4]) // OrderedSet([3, 5, 1, 4])
a.indexof(3) // 0
openpyxl 处理excel
github 文档 处理ssh的包,所以也能当sftp服务或者客户端。
-
示例
import paramiko client = paramiko.client.SSHClient() client.load_system_host_keys() client.connect( hostname="www.ramwin.com", port=22, username="*****", password="******") stdin, stdout, stderr = client.exec_command('pwd') error = stderr.read().decode("utf8") if error: raise Exception(error) print(stdout.read())
pdf2image: 把pdf转化成图片的库
from pdf2image import convert_from_path
convert_from_path(pdf_path, output_folder=path, fmt='png')
images = convert_from_path(pdf_path)
pdfminer 解析pdf的包,好用
peewee 简单而轻量级的sqlite3 orm,和django很像
流程控制算法
包管理程序
获取系统信息
- 快捷键:
- 界面工具查看
- 命令行:
alt+F12
- 命令行:
- 代码编辑
- 折叠代码
Ctrl+B 或者 Ctal+click
: 查看一个函数的定义Ctrl+Q
: 查看一个函数的文档查看文件结构
:alt+7
orctrl+F12
shift+F6
: 重构函数名称,全局变化他的名字
- 跳转
ctrl+shift+backspace
: 查看上期编辑的地方
- 界面工具查看
* 安装:
* windows: 先去[下载visual c++ 9.0](http://aka.ms/vcpython27),然后再 `pip install pycrypto`
模拟lodash的
# pip install pydash
import pydash
pydash.get(obj, "a.b.1", 1) # 默认返回1, 但是key存在为None会返回None
pydub 编辑mp3的包
- 安装依赖:
apt install libav-tools ffmpeg
- 示例
- 基础:
import math
from pydub import AudioSegment
song = AudioSegment.from_mp3('origin.mp3')
song[10*1000: 40*1000].export('target.mp3')
python虚拟化,通过制定python路径,来在服务器安装多个python
文档
添加-w
参数可以允许写入
# 直接启动一个ftplib
python -m pyftpdlib # 默认匿名登录, 端口号2121
python -m pyftpdlib --port=1223 --username=admin --password=123 -d ~/Downloads
# 后台启动
python script/启动ftp.py
PyPDF2 对中文支持不友好
pyperclip.copy('ew') # 把ew放入剪切板
pysrt 控制srt字幕
f = open("模板.docx", "rb")
document = Document() or Document(f)
first_line = document.paragraphs[0]
first_line.text = "通知"
document.save("通知.docx")
优点: 配置简单,接口清晰
缺点: 功能单一,只能返回字符串
- 用来读取本地.env的配置(当前目录.env > ~/.env)
import os
from dotenv import load_dotenv, dotenv_values
load_dotenv()
CONFIG = {
**os.environ(),
dotenv_values(),
}
- 设置环境变量
dotenv set EMAIL foo@example.org
dotenv list
pytz 时区
PyWinMouse windows下操作鼠标
qiniu 七牛的接口
requests 发送http请求
rsa 使用rsa加密
用scp传输文件
from paramiko import SSHClient
from scp import SCPClient
with SSHClient() as ssh:
ssh.load_system_host_keys()
ssh.connect("ramwin.com", compress=True) # https://github.com/jbardin/scp.py/pull/19
with SCPClient(ssh.get_transport()) as scp:
scp.put(<本地文件>, <远程路径>)
scp.get(<远程路径>, <本地文件>, recursive=True)
pip install sortedcontainers
from sortedcontainers import SortedList
s1 = SortedList()
s1.add(0)
s1.update([2, 1, 3])
模仿redis的sorted set做的自动排序的set
sudo pip3 install sortedsets
>>> from sortedsets import SortedSet
>>> ss = SortedSet()
>>> for i in range(1, 1000):
>>> ss['player' + str(i)] = i*10 if i % 2 else i*i
ss.by_score[470:511]
>>> ss.index('player20'), ss.index('player21')
400, 210
import time
from dotenv import dotenv_values, load_dotenv
from syncthing import Syncthing
load_dotenv()
folder = "目录id"
client = syncthing.Syncthing(dotenv_values()["APIKEY"])
client.db.scan(folder, sub="要同步的目录")
while client.db.completion(remote_device, folder) != 100:
time.sleep(10)
-
srt因为缺少shift功能而改成用pysrt
virtualenv --system-site-packages -p /bin/python ENV
-
watchdog 监控文件变化
-
websocket websocket 客户端
-
wechatpy 和微信的接口
-
wechat-django 微信的django app
-
word2html 把word转化成html
import word2vec
word2vec.word2phrase('./text8', './text8-phrases', verbose=True)
word2vec.word2vec('text8-phrases', 'text8.bin', size=100, verbose=True)
word2vec.word2clusters('text8', 'text8-clusters.txt', 100, verbose=True)
import word2vec
model = word2vec.load('text8.bin')
model.vocab
model.vectors.shape
model.vectors
model['狗'].shape
import xlrd
wb = xlrd.open_workbook(filename)
wb.sheets() // [sheet0, sheet1, sheet2]
ws = wb.sheets()[0]
ws.visibility // 2: hidden 0: show
for i in range(ws.nrows):
print(ws.row(i)[0]) // first column