用于记录日志并线程安全的模块
import logging
logging.basicConfig(level=logging.DEBUG,
format=‘%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s‘,
datefmt=‘%Y-%m-%d %H:%M:%S %p‘,
filename=‘log.txt‘,
filemode=‘w‘
)
logging.debug("debug messages")
logging.info("info messages")
logging.warning("warning messages")
logging.error("error messages")
logging.critical("critical messages")
日志文本结果
2018-03-23 10:33:43 AM - root - DEBUG -os_module: debug messages
2018-03-23 10:33:43 AM - root - INFO -os_module: info messages
2018-03-23 10:33:43 AM - root - WARNING -os_module: warning messages
2018-03-23 10:33:43 AM - root - ERROR -os_module: error messages
2018-03-23 10:33:43 AM - root - CRITICAL -os_module: critical messages
日志基本配置选项:
Format | Description |
---|---|
filename | 指定日志文件名 |
filemode | 指定操作日志文件的模式,默认是‘a’ |
format | 记录日志的格式 |
datefmt | 记录日期时间的格式 |
style | 样式 |
level | 指定要记录的日志级别 |
stream | 使用指定的流初始化,与filename不可同时配置 |
handlers | 指定iterable,与filename和stream不兼容 |
日志等级:
level | Numeric value |
---|---|
CRITICAL | 50 |
ERROR | 40 |
WARNING | 30 |
INFO | 20 |
DEBUG | 10 |
NOTSET | 0 |
日志格式:
更多日志详细信息请猛击这里
在程序运行时保存数据的一种方法是把所有数据以格式化的方式写入一个简单的文本文件中,只要保存和装载的工具在所选格式上达成一致,我们就可以随心所欲地使用任何自定义格式。
1、pickle
pickle模块将内存中的Python对象转化为序列化的字节流,这是一种可以写入任何类似文件对象的字节串,同时,pickle模块也可以根据序列化的字节流重新构建原来内存中的对象。
转换并写入文件:
import pickle
db = {‘name‘:‘Eric Jia‘,‘age‘:‘18‘,‘job‘:‘ops‘,‘pay‘:200}
dbfile = open(‘pickle_db‘,‘wb‘)
pickle.dump(db,dbfile)
dbfile.close()
从文件中读取数据:
import pickle
dbfile = open(‘pickle_db‘,‘rb‘)
pickle.load(dbfile)
dbfile.close()
直接转换,不写入文件:
import pickle
db = {‘name‘:‘Eric Jia‘,‘age‘:‘18‘,‘job‘:‘ops‘,‘pay‘:200}
a = pickle.dumps(db)
print("a:",a)
b = pickle.loads(a)
print("b:",b)
a: b‘\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x08\x00\x00\x00Eric Jiaq\x02X\x03\x00\x00\x00ageq\x03X\x02\x00\x00\x0018q\x04X\x03\x00\x00\x00jobq\x05X\x03\x00\x00\x00opsq\x06X\x03\x00\x00\x00payq\x07K\xc8u.‘
b: {‘name‘: ‘Eric Jia‘, ‘age‘: ‘18‘, ‘job‘: ‘ops‘, ‘pay‘: 200}
2、json
json主要用于python数据类型与字符串之间的转换,用法与pickle一致
1、dump:转换为字符串存入文件
import json
db = {‘name‘:‘Eric Jia‘,‘age‘:‘18‘,‘job‘:‘ops‘,‘pay‘:200}
dbfile = open(‘json_db‘,‘w‘)
json.dump(db,dbfile)
dbfile.close()
2、load:从文件中取出并转换为Python数据对象
dbfile = open(‘json_db‘,‘r‘)
json.load(dbfile)
dbfile.close()
3、dumps,loads:直接转换,不写入文件
db = {‘name‘:‘Eric Jia‘,‘age‘:‘18‘,‘job‘:‘ops‘,‘pay‘:200}
a = json.dumps(db)
print(a)
b = json.loads(a)
print(b)
3、shalve
pickle和json可以将python数据类型持久存储,假如你的文件系统可以处理任意多需要的文件,每个文件都是一个单独的pickle文件,这样可以避免修改一条记录时都要重新载入和存储整个数据库,这就需要将每个pickle文件名当作字典的键来存储,通过键值来访问数据,Python标准库为我们提供了一个名为shelves的模块来做这些事。
创建shelve数据库
N1 = {‘name‘:‘Eric Jia‘,‘age‘:‘18‘,‘job‘:‘ops‘,‘pay‘:200}
N2 = {‘name‘:‘Bob smith‘,‘age‘:‘28‘,‘job‘:‘java‘,‘pay‘:2000}
N3 = {‘name‘:‘David‘,‘age‘:‘38‘,‘job‘:‘go‘,‘pay‘:20000}
import shelve
db = shelve.open(‘make_db‘)
db[‘N1‘] = N1
db[‘N2‘] = N2
db[‘N3‘] = N3
db.close()
创建出的shelve数据库如下
重新打开shelve并通过键来取得数据
import shelve
db = shelve.open(‘make_db‘)
for key in db:
print(key,"=>",db[key])
db.close()
输出:
N1 => {‘name‘: ‘Eric Jia‘, ‘age‘: ‘18‘, ‘job‘: ‘ops‘, ‘pay‘: 200}
N2 => {‘name‘: ‘Bob smith‘, ‘age‘: ‘28‘, ‘job‘: ‘java‘, ‘pay‘: 2000}
N3 => {‘name‘: ‘David‘, ‘age‘: ‘38‘, ‘job‘: ‘go‘, ‘pay‘: 20000}
小结:
1、shelve内部会使用pickle来序列化和反序列化记录,它的接口像pickle一样简单:与字典相同,只是增加了open和close调用。
2、pickle用于python特有的类型和python的数据类型间进行转换,是python独有的
3、json用于字符串和python数据类型间进行转换,所有程序语言都可用。
原文地址:http://blog.51cto.com/jiayimeng/2090260