【发布时间】:2016-10-19 13:30:19
【问题描述】:
我正在尝试使用msgpack 将字典列表写入文件。但是,当我遍历Unpacker 的实例时,似乎10 的数字在每个“真实”文档之间被解包。
我正在运行的测试脚本是
import msgpack
from faker import Faker
import logging
from logging.handlers import RotatingFileHandler
fake = Faker()
fake.seed(0)
data_file = "my_log.log"
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
handler = RotatingFileHandler(data_file, maxBytes=2000, backupCount=10)
logger.addHandler(handler)
fake_dicts = [{'name': fake.name()} for _ in range(100)]
for item in fake_dicts:
dump_string = msgpack.packb(item)
logger.debug(dump_string)
unpacker = msgpack.Unpacker(open(data_file))
for unpacked in unpacker:
print unpacked
我使用fake-factory 生成虚假数据的地方。结果打印输出如下:
{'name': 'Joshua Carter'}
10
{'name': 'David Williams'}
10
{'name': 'Joseph Jones'}
10
{'name': 'Gary Perry'}
10
{'name': 'Terry Wells'}
10
{'name': 'Vanessa Cooper'}
10
{'name': 'Michael Simmons'}
10
{'name': 'Nicholas Kline'}
10
{'name': 'Lori Bennett'}
10
我不明白为什么每个字典之间都印有数字10?这是logger 以某种方式引入的吗?
【问题讨论】:
-
我的第一个想法是将换行符(Unicode 10)转换为整数。试试
print msgpack.packb(item)直接打印,看看是那里介绍的还是Unpacker里面介绍的。 -
它似乎确实来自记录器引入的换行符。我将尝试在stackoverflow.com/questions/7168790/… 之后使用
handler.terminator = ""(升级到Python 3 之后)。
标签: python