我試圖用msgpack將一個字典列表寫入文件。但是,當我迭代Unpacker
的實例時,似乎在每個「真實」文檔之間解壓縮數字10
。msgpack解開每個項目之間的數字'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)'直接打印它,看它是在那裏還是在解包器中被引入。 –
它似乎確實是來自記錄器引入的換行符。我將嘗試使用'handler.terminator =「」'在http://stackoverflow.com/questions/7168790/suppress-newline-in-python-logging-module(在升級到Python 3之後)。 –