【问题标题】:How do I write two lists to a dat file using pickle?如何使用 pickle 将两个列表写入 dat 文件?
【发布时间】:2015-03-10 02:48:16
【问题描述】:

我很确定我的格式是错误的,而且我实际上并没有在这个文件中写入任何内容。我正在尝试将aListbList 写入aFile

aList = ['useless', 'info']
bList = [1000,5000]

with open('aFile.dat', 'w') as f:
    pickle.dump('aFile.dat', f)

【问题讨论】:

    标签: list python-2.7 pickle


    【解决方案1】:

    您可以使用键 aList 和 bList 制作一个字典,并将其保存到 aFile 中,如下所示:

    import pickle
    
    aList = ['useless', 'info']
    bList = [1000,5000]
    
    aFile=open('aFile.dat', 'w')
    aFile.write(pickle.dumps({"aList":aList,"bList":bList}))
    aFile.close()
    

    如果你想附加信息,你可以做一些更详细的事情,如下所示:

    import pickle
    
    
    def extract_dict(filename):
        try:
            oldInfoFile=open(filename, 'r')
        except:
            print "File could not be opened"
            return {}
        oldInfo=oldInfoFile.read()
        oldInfoFile.close()
        try:
            oldDict=pickle.loads(oldInfo)
        except AttributeError:
            print "Non valid Pickle format"
            return {}
        return oldDict
    
    def append_dict(filename,more_info_dict):
        myDict=extract_dict(filename)
        myDict.update(more_info_dict)
        aFile=open(filename, 'w')
        aFile.write(pickle.dumps(myDict))
        aFile.close()
    
    
    #Testing what we have in aFile.dat
    print(extract_dict("aFile.dat"))
    
    aList = ['useless', 'info']
    bList = [1000,5000]
    first_info={"aList":aList,"bList":bList}
    
    #Adding data to aFile.dat
    append_dict("aFile.dat",first_info)
    
    #Verifying data was written to aFile.dat
    print(extract_dict("aFile.dat"))
    
    second_info={"aList2":aList,"bList2":bList}
    
    #Writting more data    
    append_dict("aFile.dat",second_info)
    
    #Verifying new data was written to aFile.dat
    print(extract_dict("aFile.dat"))
    

    【讨论】:

    • 我喜欢这个。如果我想在写完后附加它,我只需将 'w' 替换为 'a',对吗?
    • 另外,这种格式是否使 aFile 成为可打印的合并列表?如果是这样并不重要,我只是好奇。
    • 您可以使用 'a' 将更多信息附加到文件中。但是,通过这样做,您将无法阅读全部信息。另一方面,您可以读取存储在 aFile.dat 中的信息;添加新信息并覆盖信息
    • 我希望额外的代码是你要找的
    • 它可能是。我真的不明白前半部分,你定义一切的地方,是如何工作的,所以我觉得使用它不舒服。尽管我能够将真实数据插入您的解决方案并且效果非常好。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-11-22
    • 2021-06-24
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    相关资源
    最近更新 更多