我有这个简单的代码从mongo数据库中提取:
import sys
import codecs
import datetime
from pymongo import MongoClient
sys.stdout = codecs.getwriter('utf8')(sys.stdout)
mongo_db = "database"
collectionId = "coll name"
def main(argv):
client = MongoClient("mongodb://localhost:27017")
db = client[mongo_db]
collection = db[collectionId]
cursor = collection.find({})
for document in cursor:
# if "content" in document:
# sys.stdout.write(
# "|"+(document['content'] if document['content'] is not None else "")+"\n")
for key, value in document.items() :
sys.stdout.write(key.decode('utf-8'))
if __name__ == "__main__":
main(sys.argv)
像这样运行,让我
AttributeError:'str'对象没有属性'decode'
那么......那是一个str对象呢?但如果我删除解码,我会
TypeError:必须是str,而不是bytes
并且,它不像是打印任何东西,所以,它必须在第一个键失败?但是......第一个关键字既不是str也不是字节???我怎么打印这个?
使用flush进行EDIT测试:
for key, value in document.items() :
sys.stdout.write("1")
sys.stdout.flush()
sys.stdout.write(key.decode('utf-8'))
sys.stdout.flush()
我将for更改为了,得到了错误
~/Desktop$ python3 sentimongo.py
Traceback (most recent call last):
File "sentimongo.py", line 30, in <module>
main(sys.argv)
File "sentimongo.py", line 24, in main
sys.stdout.write("1")
File "/usr/lib/python3.4/codecs.py", line 374, in write
self.stream.write(data)
TypeError: must be str, not bytes
答案 0 :(得分:4)
sys.stdout = codecs.getwriter('utf8')(sys.stdout)
此行更改标准输出,因此它会执行与您通常看到的不同的操作。在Python 3中,您并不需要关心将事物转换为utf8,因为所有内容都已经是unicode字符串。
如果删除该行,写一个普通字符串(甚至打印一个字符串)应该可以正常工作。