将列表中的整数转换为要写入文本文件的字符串,然后再检索

时间:2016-01-13 02:36:39

标签: python text type-conversion python-3.4 writing

我正在尝试制作stats.txt文件,我可以存储winsdrawslosses。到目前为止,我能够检索值并在程序运行时修改它们的唯一方法是使用.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的相同格式检索它。

我只是将文本文件中的值作为整数导入,修改它们,然后将它们写成整数,但我还没有找到办法。我知道必须有更好的方法来做到这一点。

2 个答案:

答案 0 :(得分:0)

您希望使用writelines()而不是write()来编写可迭代对象(例如字符串列表),类似于获取单个字符串的方法是read()和获取字符串列表的方法是readlines()

答案 1 :(得分:0)

  1. 在这种情况下,您应该使用str.strip()代替str.split()str.split()通过空字母(空格,换行符,制表符等)拆分字符串并返回列表。

    但是,您似乎不需要此处的列表,只想删除User32,然后您可以使用str.strip()。这会删除字符串之后和之前的空字母

    演示:

    \n
  2. 然后,它是一个int对象。所以你可以完全放弃这些列表理解并使用>>> s = '0\n' >>> s '0\n' >>> s.strip() '0' >>> s.split() ['0'] >>> int(s.strip()) 0

    但是,当您将其写回文件时,可以使用object += 1函数将其转换为字符串对象。

    如果您不希望将它们全部放在一行,请记住添加str()

    +\n