我正在尝试制作一个程序,以这种格式将玩家分数添加到文本文件中:
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(得分),而我希望它被添加到同一行。所以,让我们说约翰这次得分为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”的放置是否有问题?感谢您提供的任何帮助!
答案 0 :(得分:0)
readlines
使用\n
我会修改这一行:
if name in line:
lines[i] = line.strip() + "\t" + str(score) + "\n"
strip
确保您行末尾没有\n
或\t
。
答案 1 :(得分:0)
您的问题正在发生,因为.readlines()
会在每行末尾保留换行符。作为替代方案,您可以将文件数据读入单个字符串并使用.splitlines()
将其拆分为行,默认情况下会抛弃新行(尽管您可以将keepends
参数传递给{{1}如果你愿意,可以保留换行符。
使用splitlines(),你的代码就像这样:
True
您的数据文件是文本文件,但不以换行符结尾;这可能会导致某些文本编辑器和其他文本处理工具出现问题。你可以考虑改变它。
<强>更新强>
我修改了代码,在名称的末尾添加了一个标签(#!/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()
)。因此,现在新的分数不会错误地添加到恰好包含新名称的名称中。例如,如果文件中有Alexander的行,而新名称是Alex,则Alex的数据将转到新行,因为\t
不在"Alex\t"
。