软硬件环境

  • 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}}}

参考资料



Comments

comments powered by Disqus