При обновлении содержимого .txt файлов создается дубликат файла с символом «?» - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь создать файл, в котором у игроков есть деньги, но я пытаюсь обновить строку с деньгами.Это создаст новый файл с тем же именем, но с '?'в конце.

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 голосов
/ 17 февраля 2019

Проблема в том, что имя файла содержит символ новой строки ('\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 не передан параметр, он удалит все завершающие пробельные символы.

Строка "Деньги" в файле не имеетзавершающий символ новой строки, но было бы разумно вызывать rstrip независимо от него, поскольку его можно было бы добавить, если файл был отредактирован в текстовом редакторе, или если в файл было добавлено больше строк.

В оболочке bash вы можете «видеть» переводы строки, передавая выходные данные с ls по cat или sed (кредит этот комментарий ):

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