写入文本文件时,每当我添加到行时,它都会写入下一行

2024-04-26 07:41:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试制作一个程序,将玩家的分数以以下格式添加到文本文件中:

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

所以问题是,如果我让用户“Bob”在带有“John”的行下面,并且我用我的程序来表示“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”的位置有问题吗?谢谢你的帮助!你知道吗


Tags: namein程序txtcloseline玩家group
2条回答

出现问题的原因是.readlines()在每行末尾保留了换行符。另一种方法是,您可以将文件数据读入单个字符串,然后使用.splitlines()将其拆分为行,默认情况下,这会丢弃换行符(不过,如果需要,您可以传递keependsTrue参数来保留换行符)。你知道吗

使用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() 

您的数据文件是一个文本文件,但它不会以换行结束;这可能会导致某些文本编辑器和其他文本处理工具出现问题。你可以考虑改变这一点。你知道吗


更新

我修改了代码,在名称的末尾添加了一个tab(\t)。因此,新的分数不会被错误地添加到恰好包含新名称的名称中。例如,如果文件中有Alexander的一行,并且新名称是Alex,那么Alex的数据将转到新行,因为"Alex\t"不在"Alexander\t"。你知道吗

readlines返回行及其\n

我要修改这行:

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

strip确保行尾没有\n\t。你知道吗

相关问题 更多 >