我正在尝试构建一个非常简单的MongoDB提取脚本,但我偶然发现了大多数键名和字符串被记录为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)
但是我一直在遇到一些未被发现的场景(比如字典列表,或者只是一个简单的字符串列表),并且必须将所有这些添加到该函数中,到现在它相当丑陋。
关于如何使这更简单的任何想法?
答案 0 :(得分:-1)
简单回答: 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与语言无关
泡椒很慢
对Pickle的解释:HERE