Python中处理MongoDB对象的有效方法
我试图构建一个非常简单的MongoDB提取脚本,但我偶然发现了这样一个问题:大多数键名和字符串被记录为Python中处理MongoDB对象的有效方法,python,mongodb,unicode,bson,Python,Mongodb,Unicode,Bson,我试图构建一个非常简单的MongoDB提取脚本,但我偶然发现了这样一个问题:大多数键名和字符串被记录为unicode。 因此,当我试图打印一个文档时,它会显示一组键和值,如u'username':u'christian'等 我在这个数据库中的文档非常大和复杂,所以我有几个嵌套的级别 我搜索了一下,将unicode键和值转换成ASCII,但没有找到任何结果 我正试图像这样转换所有键和值 def convert2ascii: for k, v in mydict.iteritems():
unicode
。
因此,当我试图打印一个文档时,它会显示一组键和值,如u'username':u'christian'
等
我在这个数据库中的文档非常大和复杂,所以我有几个嵌套的级别
我搜索了一下,将unicode键和值转换成ASCII,但没有找到任何结果
我正试图像这样转换所有键和值
def convert2ascii:
for k, v in mydict.iteritems():
newk = k.encode('ascii','ignore')
mydict[newk] = mydict.pop(k)
if isinstance(v, unicode):
mydict[newk] = v.encode('ascii','ignore')
elif isinstance(v, dict):
convert2ascii(v)
#elif isinstance(v, list): // todo
# convert2ascii(v)
但是我一直遇到一些未被发现的情况(比如字典列表,或者只是字符串的简单列表),并且必须将所有这些添加到该函数中,到目前为止,它相当难看
有没有关于如何简化的想法?简单回答:
Pickle
这是一种非常快速、简单的序列化和保存任何对象的方法
import pickle
# pickle highest performance object conversion into a bytestream
# used to pickle n unpickle (i.e. save/load)
def save(file, filename='file'):
with open(f'{filename}.pickle', 'wb') as f:
pickle.dump(file, f, protocol=pickle.HIGHEST_PROTOCOL)
def load(filename):
with open(f'{filename}.pickle', 'rb') as f:
return pickle.load(f)
Pickle是不安全的,因为它通过调用任意函数来构造任意Python对象
泡菜不是人类可读的
Pickle不是语言不可知论者
泡菜很慢
Pickle的缺点:为什么您认为Unicode键是一个问题?它们不是,你绝对不应该把它们编码成任何东西。我只是想在任何地方去掉u。我不能像这样将导出的文件交付给其他部门,因为这会导致他们导入文件时出现问题。但是Mongodb的输出不是文件。如果您想要一个文件,那么就使用类似JSON的文件序列化格式。这样就不需要对任何东西进行编码了。是的,但是怎么做呢?这正是我想要的。将其简单地输出为JSON。但即使这样,由于文档的unicode格式,我也无法轻松做到。请使用内置的json库:
json.dumps(my_data)
。不需要转换任何Unicode。