文件输入输出python保存文件

时间:2013-11-19 20:50:17

标签: python file-io

我正在尝试拿一本字典并将其写入文件。每行输出都假设包含密钥,其值由单个空格分隔。到目前为止,我有以下内容:

def save(diction):

    savefile = open("save.txt", "w")

    for line in diction:
        values = line.split()
        savefile.write(values)
    savefile.close()

我不确定这是写入文件还是使用.close()函数保存文件。有什么建议吗?

4 个答案:

答案 0 :(得分:1)

values正在savefile.write(values)上写入文件,但是打开和关闭文件的方法有点危险。如果您遇到错误,该文件可能永远不会被关闭。最好使用with来确保在离开with块时自动关闭文件,无论是正常执行还是出错。另外,您可能想要遍历diction.items()

def save(diction):
    with open("save.txt", "w") as savefile:
        for key, value in diction.items():
            values = "%s %s\n" % (key, value)
            savefile.write(values)

答案 1 :(得分:1)

如果你试图调用这个函数,它会给你一个例外,如:

----> 7         savefile.write(values)

TypeError: must be str, not list

...然后退出。所以不,它没有写任何东西,因为你的代码中存在错误。

这个错误是什么意思?好吧,显然该行中的某些内容是list,而它应该是str。它不是savefile,不是write,所以它必须是values。事实上,values是一个列表,因为这是你从split得到的。 (如果您不明白,请将一些调试代码添加到print(values)print(type(values))的函数中,然后再次运行代码。)

如果您在内置帮助或on the web中查找write方法,或重新阅读教程部分Methods of File Objects,您会发现它确实需要字符串。

那么,你怎么写出一个清单?

你必须决定你想要它的样子。如果您希望它与print语句中的内容相同,则只需调用str即可:

savefile.write(str(values))

但通常情况下,你希望它能够成为人类看起来很好的东西,或者是你为后来编写的脚本轻松解析的东西。

例如,如果您想将每个values打印为由20个字符宽的列组成的行,您可以执行以下操作:

savefile.write(''.join(format(value, '<20') for value in values) + '\n')

如果您想要以后可以解析的内容,通常最好使用其中一个知道如何编写(和阅读)特定格式的模块 - csvjsonpickle等等。

有关Input and Output的教程章节值得一读,以获取更多信息。

答案 2 :(得分:0)

def save_dict(my_dict):
    with open('save.txt', 'w') as f:
        for key in my_dict.keys():
            f.write(key + ' ' + my_dict[key] + '\n')

if __name__ == "__main__":
    my_dict = {'a': '1',
            'b': '2'}
    save_dict(my_dict)

答案 3 :(得分:0)

def save(diction):
with open('save.txt', 'w') as savefile:
    for key, value in diction.items():
        savefile.write(str(key)+ ' ' + str(value) + '\n')