将字典写入文件并读回-最有效的方法

时间:2019-07-02 21:30:19

标签: python

我想用字典写一个文本文件。我见过三种方法,它们似乎都是有效的,但是我对哪一种方法最适合阅读/写作最有效或最有效的方法感兴趣,特别是当我有一个包含很多条目的大型词典以及原因时。 / 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)




2 个答案:

答案 0 :(得分:0)

关于效率的答案已经被注释所涵盖,但是,如果您的数据集很大并且您可能想要复制您的方法来考虑SQL替代方法,那么这可能对您很有用,这在python中变得更容易与SQLAlchemy。这样,您可以快速访问它,但将其整齐地存储在数据库中。

答案 1 :(得分:0)

某些python类的对象可能无法json序列化。如果字典中包含此类对象(作为值),则不能使用json对象。

当然,某些python类的某些对象可能无法进行pickle序列化(例如,keras / tensorflow对象)。然后,再次,您不能使用泡菜方法。

在我看来,不能被json序列化的类比不能被腌制的类更多。

也就是说,pickle方法可能比json更广泛地适用。

从效率角度考虑(考虑到字典既可以json可序列化又可以进行pickle),因为不涉及字符串转换(序列化时为数字到字符串,反序列化时为字符串到数字),所以pickle总是会赢。

如果您尝试将对象传输到另一个进程/服务器(以另一种编程语言编写,尤其是Java等语言编写),则必须使用json。即使您写入文件并且从该文件读取另一个进程,这也适用。

所以...这取决于您的用例。