徐高翔的个人网站

python实用模块推荐(2)_pyyaml_qrcode_tinydb

2018-10-24

软硬件环境

  • ubuntu 18.04 64bit
  • anaconda with python 3.6
  • pyyaml
  • qrcode
  • tinydb

pyyaml

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

YAML中的数据结构

  • 对象

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

  • 数组

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

  • 纯量

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

安装pyyaml

1
pip install pyyaml

示例配置文件test.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
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
1
2
3
4
5
6
7
8
9
10
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'])

程序输出如下

1
2
3
<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

1
pip install qrcode

安装过程中,同时会安装qr这个命令行工具,它可以帮助快速生成二维码,具体可以通过qr --help来查看使用方法

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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

1
pip install tinydb

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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文件内容为

1
{"_default": {"1": {"name": "xgx", "sex": "male"}, "2": {"name": "djstava", "sex": "male"}, "3": {"name": "djstava", "sex": "female"}}, "far": {"1": {"score": 100}}}

参考资料

本文链接 https://xugaoxiang.com/2018/10/24/python实用模块推荐(2)_pyyaml_qrcode_tinydb/

推荐文章(由hexo文章推荐插件驱动)

使用支付宝打赏
使用微信打赏

请博主喝咖啡!