簡體   English   中英

將列表中的整數轉換為要寫入文本文件並稍后檢索的字符串

[英]Convert integer within a list into a string to be written to a text file and later retrieved

我正在嘗試制作一個stats.txt文件,我可以在其中存儲winsdrawslosses 到目前為止,我能夠在程序運行時檢索值並修改它們的唯一方法是使用.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 。

我寧願將文本文件中的值作為整數導入,修改它們,然后將它們寫為整數,但我還沒有找到一種方法來做到這一點。 我知道必須有更好的方法來完成上述工作。

您想使用writelines()而不是write()來編寫可迭代對象(例如字符串列表),類似於獲取單個字符串的方法是read()和獲取字符串列表的方法是readlines()

  1. 在這種情況下,您應該使用str.strip()而不是str.split() str.split()空字母(空格、換行符、制表符等)分割字符串並返回一個列表。

    但是,您似乎不需要此處的列表,只想刪除它\n ,然后,您可以使用str.strip() 這會刪除字符串前后的空字母

    演示:

     >>> s = '0\n' >>> s '0\n' >>> s.strip() '0' >>> s.split() ['0'] >>> int(s.strip()) 0
  2. 然后,它是一個 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')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM