Python 将列表中的整数转换为字符串,以写入文本文件并稍后检索

Python 将列表中的整数转换为字符串,以写入文本文件并稍后检索,python,text,type-conversion,python-3.4,writing,Python,Text,Type Conversion,Python 3.4,Writing,我正在尝试制作一个stats.txt文件,在那里我可以存储赢的,抽的,和输的。到目前为止,我能够检索值并在程序运行时修改它们的唯一方法是使用.readlines()打开它们,然后将它们作为列表中的整数分配给变量(见下文) 我的问题是,我似乎找不到一种方法将它们以列表形式写回文本文件。谁能给我指出正确的方向吗 文本文件的格式如下: 0\n 0\n 0\n 除了三个0,后跟enter之外,没有其他内容写入其中。 我的代码如下: stats = open("C:/Users/JawshBawx/Do

我正在尝试制作一个
stats.txt
文件,在那里我可以存储
赢的
抽的
,和
输的
。到目前为止,我能够检索值并在程序运行时修改它们的唯一方法是使用
.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())
如果我在没有
列表的情况下分配这些值,
输出在打印时变为: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


我宁愿将文本文件中的值作为整数导入,修改它们,然后将它们作为整数写入,但我还没有找到这样做的方法。我知道一定有更好的方法来实现上述功能。

您想使用
writelines()
而不是
write()
来编写一个iterable对象(例如字符串列表),类似于获取单个字符串的方法是
read()
,获取字符串列表的方法是
readlines()

  • 在这种情况下,您应该使用而不是。按空字母(空格、换行符、制表符等)拆分字符串并返回列表

    但是,这里似乎不需要列表,只需要删除
    \n
    ,然后就可以使用。它删除字符串前后的空字母

    演示:

  • 然后,它是一个int对象。因此,您可以完全删除这些列表并使用
    object+=1

    但是,当您将字符串对象写回文件时,可以使用
    str()
    函数将其转换为字符串对象

    请记住,如果您不想将它们全部放在一行中,请添加一个
    +\n

    with open("C:/Users/JawshBawx/Documents/LiClipse Workspace/RPScLSp/RPScLSp_Src/Stats.txt", "r") as f:
        lines = f.readlines()
        wins = int(lines[0].strip())
        draws = int(lines[1].strip())
        losses = int(lines[2].strip())
    
    if result == 0:
        print("Draw!")
        draws += 1
    
    elif result in [1, 2]:
        print(ai_var+" Wins!")
        losses += 1
    
    else:
        print(user_var+" Wins!")
        wins += 1
    
    with open("C:/Users/JawshBawx/Documents/LiClipse Workspace/RPScLSp/RPScLSp_Src/Stats.txt","w") as f:
        f.write(str(wins)+'\n')
        f.write(str(draws)+'\n')
        f.write(str(losses)+'\n')
    

  • 注意:
    [int(val)for val in line[0].split()]
    不需要
    list
    stats。close
    不关闭文件,您需要调用它
    stats.close()
    或使用
    with
    语句进行读取。您只需对文件执行
    readlines()
    ,然后您就不需要该文件并可以将其关闭。您必须根据建议的TypeError将列表转换为字符串。您可以执行例如
    f.write(str(wins))
    ,但保存的输出可能不是您想要的。或者类似于
    f.write(',').join([str(win)表示wins中的win])
    。到那时,你可能会开始考虑csv模块,甚至numpy。这看起来几乎完美!当我运行这个程序时,我在:wins+=1 TypeError:无法将'int'对象转换为strimplicitly@Jawshbawx:嗯,我已经编辑了我的答案。看一看,太好了!非常感谢,这让我很沮丧。
    with open("C:/Users/JawshBawx/Documents/LiClipse Workspace/RPScLSp/RPScLSp_Src/Stats.txt", "r") as f:
        lines = f.readlines()
        wins = int(lines[0].strip())
        draws = int(lines[1].strip())
        losses = int(lines[2].strip())
    
    if result == 0:
        print("Draw!")
        draws += 1
    
    elif result in [1, 2]:
        print(ai_var+" Wins!")
        losses += 1
    
    else:
        print(user_var+" Wins!")
        wins += 1
    
    with open("C:/Users/JawshBawx/Documents/LiClipse Workspace/RPScLSp/RPScLSp_Src/Stats.txt","w") as f:
        f.write(str(wins)+'\n')
        f.write(str(draws)+'\n')
        f.write(str(losses)+'\n')