更新.txt文件内容时,它会创建带有'?”的重复文件。

时间:2019-02-16 13:04:59

标签: python file file-handling

我正在尝试制作一个可以让玩家赚钱的文件,但是却试图用钱来更新该行。它将创建一个具有相同名称但带有“?”的新文件。最后。

Name = input("Username: ")
f = open((Name) + ".txt", "w")
global Money
Money = int(100)
lines = [(Name) + "\n", str(Money)]
f.writelines(lines)
f.close()  

这是最初创建文件的地方

save = input("What is the file you'd like to refer to?")
f = open((save) + ".txt", "r")
Name = (f.readline())
Money = int(f.readline())   

此代码段工作正常,并且已按预期将变量设置为所需的数据。 (在另一种情况下)

lines = [(Name) + "\n", str(Money)]

在上一个模块中,我将“行”定义为这些行。

global Name
Money = Money - 50
f = open((Name) + ".txt", "w")
f.writelines(lines)
f.close()

这是创建另一个文件的代码段,我只希望它更新文件,但它正在创建另一个文件。 (有时它什么也没做)

1 个答案:

答案 0 :(得分:0)

问题在于文件名包含换行符('\n')。显示文件名时,ls实用程序将使用问号替换此字符。

换行符来自以下代码:

save = input("What is the file you'd like to refer to?")
f = open((save) + ".txt", "r")
Name = (f.readline())
Money = int(f.readline())  

f.readline返回的行在该行的末尾包含换行符。

删除换行符最简单的方法是使用str.rstrip,如下所示:

Name = f.readline().rstrip('\n')

这也可以:

Name = f.readline().rstrip()

如果rstrip没有传递参数,它将删除所有所有尾随空白字符。

文件中的“ Money”行没有尾随换行符,但是无论如何都应调用rstrip,因为如果在文本编辑器中编辑文件,可能会添加一行,或是否在文件中添加了更多行。

在bash shell中,您可以通过将ls的输出通过catsed(贷记到this comment)来“看到”换行符:

>  ls test*.txt
test?.txt
>  ls test*.txt | cat
test
.txt
>  ls test*.txt | sed -n l
test$
.txt$