【发布时间】:2016-01-13 02:36:38
【问题描述】:
我正在尝试创建一个stats.txt 文件,我可以在其中存储wins、draws 和losses。到目前为止,我能够在程序运行时检索值并修改它们的唯一方法是使用.readlines() 打开它们,然后将它们作为列表中的整数分配给变量(见下文)。
我的问题是我似乎找不到将它们写回文本文件的方法,因为它们是列表形式。谁能指出我正确的方向?
文本文件格式如下:
0\n
0\n
0\n
除了三个 0 和后面的 enter. 之外,没有其他内容写在里面
我的代码如下:
stats = open("C:/Users/JawshBawx/Documents/LiClipse Workspace/RPScLSp/RPScLSp_Src/Stats.txt","r")
lines = stats.readlines()
wins = list(int(val) for val in lines[0].split())
draws = list(int(val) for val in lines[1].split())
losses = list(int(val) for val in lines[2].split())
如果我在没有list, 的情况下分配这些值,则打印时输出变为:generator object <genexpr> at 0x0000011CEF216CA8,并且我无法使用 +1 修改值。
if result == 0:
print("Draw!")
draws = [x + 1 for x in draws]
elif result == 1:
print(ai_var+" Wins!")
losses = [x + 1 for x in losses]
elif result == 2:
print(ai_var+" Wins!")
losses = [x + 1 for x in losses]
elif result == 3:
print(user_var+" Wins!")
wins = [x + 1 for x in wins]
else:
print(user_var+" Wins!")
wins = [x + 1 for x in wins]
print(wins)
print(draws)
print(losses)
stats.close
with open("C:/Users/JawshBawx/Documents/LiClipse Workspace/RPScLSp/RPScLSp_Src/Stats.txt","w") as f:
f.write(wins)
f.write(draws)
f.write(losses)
我的结果是:
TypeError: write() argument must be str, not list
我无法将其转换为字符串,并以这样的方式写入,即它会以我需要的相同格式检索,以便能够在每次程序运行时处理 i。
我宁愿将文本文件中的值作为整数导入,修改它们,然后将它们写为整数,但我还没有找到这样做的方法。我知道必须有更好的方法来完成上述操作。
【问题讨论】:
-
注意:
[int(val) for val in lines[0].split()]不需要list。 -
stats.close不会关闭文件,你需要调用它stats.close() -
或者也可以使用
with语句进行阅读。你只是在文件上做readlines(),之后你不需要这个文件并且可以关闭它。 -
您必须根据建议的 TypeError 将列表转换为字符串。你可以做例如
f.write(str(wins)),但保存的输出可能不是您想要的。或类似f.write(','.join([str(win) for win in wins]))的东西。到那时,你可能会开始考虑 csv 模块,甚至 numpy。
标签: python text type-conversion python-3.4 writing