簡體   English   中英

寫到文本文件時,每當我添加到行時,它都會寫在下一行

[英]Writing onto text file, whenever I add to line, it is written on the next line

我正在嘗試制作一個將球員成績添加到以下格式的文本文件中的程序:

John    3    4                (The name and scores are seperated by "\t")
Bob     3    6                    (Each new name has it's own line)

因此,問題在於,如果我在帶有“ John”的行下有用戶“ Bob”,並且將程序用於“ John”,則會創建新行,然后創建“ \\ t” + str(score),而我想要在同一行上添加。 因此,假設約翰這次得分為3,則文本文件將寫為:

John    3    4
                  3Bob     3    6

代替:

John    3    4    3
Bob     3    6

這是我到目前為止的內容:

r = open("Class%d.txt"%(group),"r")
lines = r.readlines()
r.close()
for i, line in enumerate(lines):
    if name in line:
        lines[i] = line + "\t" + str(score)
        break
else:
    lines.append("\n" + name + "\t" + str(score))
w = open("Class%d.txt"%(group),"w")
w.writelines(lines)
w.close() 

“ \\ n”的位置有問題嗎? 感謝您提供的任何幫助!

readlines返回帶有\\n

我將修改此行:

    if name in line:
        lines[i] = line.strip() + "\t" + str(score) + "\n"

strip確保行的末尾沒有\\n\\t

發生您的問題是因為.readlines()在每行的末尾保留換行符。 或者,您可以將文件數據讀取為單個字符串,然后使用.splitlines()將其分割為幾行,默認情況下會丟棄換行符(盡管您可以將其傳遞為Truekeepends參數來保留換行符,如果您想)。

使用splitlines(),您的代碼將變成這樣:

#!/usr/bin/env python

fname = "student_data"

r = open(fname, "r")
lines = r.read()
r.close()

lines = lines.splitlines()

name, score = "John", 3
name = name + "\t"

for i, line in enumerate(lines):
    if name in line:
        lines[i] = line + "\t" + str(score)
        break
else:
    lines.append(name + str(score))

#for s in lines: print s

lines = '\n'.join(lines)

w = open(fname, "w")
w.write(lines)
w.close() 

您的數據文件是一個文本文件,但沒有以換行符結尾; 可能會導致某些文本編輯器和其他文本處理工具出現問題。 您可以考慮更改它。


更新

我已經修改了代碼,在名稱的末尾添加了一個制表符( \\t )。 因此,現在不會將新分數添加到恰好包含新名稱的名稱中。 例如,如果文件中有Alexander行,並且新名稱是Alex,則由於"Alex\\t"不在"Alexander\\t" ,因此Alex的數據將換行。

暫無
暫無

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

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