我正在尝试制作stats.txt
文件,我可以存储wins
,draws
和losses
。到目前为止,我能够检索值并在程序运行时修改它们的唯一方法是使用.readlines()
打开它们,然后将它们作为列表中的整数分配给变量(见下文)。 / p>
我的问题是,我似乎找不到将它们写回文本文件的方法,因为它们是列表形式。有人能指出我正确的方向吗?
文本文件采用以下格式:
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的相同格式检索它。
我只是将文本文件中的值作为整数导入,修改它们,然后将它们写成整数,但我还没有找到办法。我知道必须有更好的方法来做到这一点。
答案 0 :(得分:0)
您希望使用writelines()
而不是write()
来编写可迭代对象(例如字符串列表),类似于获取单个字符串的方法是read()
和获取字符串列表的方法是readlines()
。
答案 1 :(得分:0)
在这种情况下,您应该使用str.strip()
代替str.split()
。 str.split()
通过空字母(空格,换行符,制表符等)拆分字符串并返回列表。
但是,您似乎不需要此处的列表,只想删除User32
,然后您可以使用str.strip()
。这会删除字符串之后和之前的空字母。
演示:
\n
然后,它是一个int对象。所以你可以完全放弃这些列表理解并使用>>> s = '0\n'
>>> s
'0\n'
>>> s.strip()
'0'
>>> s.split()
['0']
>>> int(s.strip())
0
。
但是,当您将其写回文件时,可以使用object += 1
函数将其转换为字符串对象。
如果您不希望将它们全部放在一行,请记住添加str()
:
+\n