【问题标题】:While updating a .txt files contents, it creates a duplicate file with a '?"在更新 .txt 文件内容时,它会创建一个带有“?”的重复文件
【发布时间】:2019-07-10 10:11:53
【问题描述】:

我正在尝试制作一个文件来保存玩家的钱,但同时尝试用钱来更新线路。它将创建一个具有相同名称但带有“?”的新文件最后。

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

这个 sn-p 工作正常,它按预期将变量设置为我想要的数据。 (另一种情况)

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

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

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

这是创建另一个文件的 sn-p,我只是希望它更新文件,但它正在创建另一个文件。 (有时它什么都不做)

【问题讨论】:

  • 这里不需要global。我只能假设您在函数中有此功能,并且您会收到教科书,说明为什么 globals 是个坏主意。请给minimal reproducible example 重新创建问题。
  • 为什么有这些括号?
  • 我没有给你完整代码的原因是我刚刚完成了出错的部分。是它目前距离定义变量的位置 323 行。
  • 在写入文件之前print(Name + '.txt')会得到什么?
  • 在我第一次创建文件后,它给了我 mansand.txt(mansand 是例如名称)但是当我试图重写它时,它给了我 mansand(然后是一个新行)。 txt

标签: python file file-handling


【解决方案1】:

问题在于文件名包含换行符 ('\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$

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 2017-07-22
    相关资源
    最近更新 更多