Python实用模块推荐2:pyyaml、qrcode、tinydb

YAML(Yet Another Markup Language)是一种标记语言,类似XML,用于项目配置文件的书写。它语法简单,大小写敏感,使用缩进表示层级关系,可以在配置中穿插注释(这点完胜json)。
YAML中的数据结构
对象

键值对的集合,又称映射、哈希

数组

一组按顺序排列的值,又称列表,是由一组连词线(-)开头的行

纯量

单个的、不可再分的值,如字符串、布尔值、整数等

安装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’)
# 读取用load,保存用dump
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最小为21×21像素;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}}}

发表评论