我想用字典写一个文本文件。我见过三种方法,它们似乎都是有效的,但是我对哪一种方法最适合阅读/写作最有效或最有效的方法感兴趣,特别是当我有一个包含很多条目的大型词典以及原因时。 / p>
new_dict = {}
new_dict["city"] = "Boston"
# Writing to the file by string conversion
with open(r'C:\\Users\xy243\Documents\pop.txt', 'w') as new_file:
new_file.write(str(new_dict))
# Writing to the file using Pickle
import pickle
with open(r'C:\\Users\xy243\Documents\pop.txt', 'w') as new_file:
pickle.dump(new_dict, new_file, protocol=pickle.HIGHEST_PROTOCOL)
# Writing to the file using JSON
import json
with open(r'C:\\Users\xy243\Documents\pop.txt', 'w') as new_file:
json.dump(new_dict, new_file)
答案 0 :(得分:0)
关于效率的答案已经被注释所涵盖,但是,如果您的数据集很大并且您可能想要复制您的方法来考虑SQL替代方法,那么这可能对您很有用,这在python中变得更容易与SQLAlchemy。这样,您可以快速访问它,但将其整齐地存储在数据库中。
答案 1 :(得分:0)
某些python类的对象可能无法json序列化。如果字典中包含此类对象(作为值),则不能使用json对象。
当然,某些python类的某些对象可能无法进行pickle序列化(例如,keras / tensorflow对象)。然后,再次,您不能使用泡菜方法。
在我看来,不能被json序列化的类比不能被腌制的类更多。
也就是说,pickle方法可能比json更广泛地适用。
从效率角度考虑(考虑到字典既可以json可序列化又可以进行pickle),因为不涉及字符串转换(序列化时为数字到字符串,反序列化时为字符串到数字),所以pickle总是会赢。
如果您尝试将对象传输到另一个进程/服务器(以另一种编程语言编写,尤其是Java等语言编写),则必须使用json。即使您写入文件并且从该文件读取另一个进程,这也适用。
所以...这取决于您的用例。