python实用模块推荐(2)_pyyaml_qrcode_tinydb
原文出处: https://blog.xugaoxiang.com/python/python-module-2.html
软硬件环境
- ubuntu 18.04 64bit
- anaconda with python 3.6
- pyyaml
- qrcode
- tinydb
pyyaml
YAML(Yet Another Markup Language)是一种标记语言,类似XML
,用于项目配置文件的书写。它语法简单,大小写敏感,使用缩进表示层级关系,可以在配置中穿插注释(这点完胜json
)。
安装pyyaml
pip install pyyaml
示例配置文件test.yaml
PROJECT:
MYSQL:
ip: 127.0.0.1
port: 3306
user: xgx
password: xgx
database: far
tablename: attendance
encoding: utf8
NTP:
ip: 127.0.0.1
port: 123
import yaml
f = open('test.yaml', encoding = 'utf-8')
conf = yaml.load(f)
print(type(conf))
print(conf['PROJECT'])
print(conf['PROJECT']['NTP']['ip'])
程序输出如下
<class 'dict'>
{'MYSQL': {'ip': '127.0.0.1', 'port': 3306, 'user': 'xgx', 'password': 'xgx', 'database': 'far', 'tablename': 'attendance', 'encoding': 'utf8'}, 'NTP': {'ip': '127.0.0.1', 'port': 123}}
127.0.0.1
qrcode
qrcode
是一个生成二维码的第三方库
安装qrcode
pip install qrcode
安装过程中,同时会安装qr
这个命令行工具,它可以帮助快速生成二维码,具体可以通过qr --help
来查看使用方法
代码示例
import qrcode
# 最简单的生成方法
img = qrcode.make('https://xugaoxiang.com')
# 复杂点的方法,即有更多的参数控制; version取值1~40,表示二维码的大小,1最小为21x21像素;error_correction表示纠错百分比,ERROR_CORRECT_L对应7%,除此之外还可以取值ERROR_CORRECT_M(15%),ERROR_CORRECT_Q(25%),ERROR_CORRECT_H(30%)
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data('https://xugaoxiang.com')
qr.make(fit=True)
# 填充色及背景色
img = qr.make_image(fill_color="black", back_color="white")
# save it
img.save('qrcode.png')
tinydb
tinydb
是一个纯python
编写且无第三方依赖的轻量级的面向文档的数据库,适合在中小型应用中使用。
安装tinydb
pip install tinydb
示例代码
from tinydb import TinyDB, Query
db = TinyDB('test.json')
# 插入操作
db.insert({'name':'xgx', 'sex':'male'})
db.insert({'name':'djstava', 'sex':'male'})
# 这是一条新的记录,而不是修改上条记录的sex字段
db.insert({'name':'djstava', 'sex':'female'})
# 查询操作
q = Query()
db.search(q.name == 'xgx')
db.search(q.sex == 'male')
# 查询条件支持&和|操作,组合查询
db.search((q.sex == 'male') & (q.name == 'djstava'))
# 表, 如果不指定表名,默认是_default
table = db.table('far')
table.insert({'score': 100})
最后生成的test.json
文件内容为
{"_default": {"1": {"name": "xgx", "sex": "male"}, "2": {"name": "djstava", "sex": "male"}, "3": {"name": "djstava", "sex": "female"}}, "far": {"1": {"score": 100}}}
参考资料
- https://pyyaml.org/wiki/PyYAMLDocumentation
- https://github.com/lincolnloop/python-qrcode
- https://github.com/msiemens/tinydb