我正在尝试拿一本字典并将其写入文件。每行输出都假设包含密钥,其值由单个空格分隔。到目前为止,我有以下内容:
def save(diction):
savefile = open("save.txt", "w")
for line in diction:
values = line.split()
savefile.write(values)
savefile.close()
我不确定这是写入文件还是使用.close()函数保存文件。有什么建议吗?
答案 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')
如果您想要以后可以解析的内容,通常最好使用其中一个知道如何编写(和阅读)特定格式的模块 - csv
,json
,pickle
等等。
有关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')