写入文本文件,每当我添加到行,它就写在下一行

时间:2015-02-14 11:23:49

标签: 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(得分),而我希望它被添加到同一行。所以,让我们说约翰这次得分为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”的放置是否有问题?感谢您提供的任何帮助!

2 个答案:

答案 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"