我正在编写一个Python程序,希望在输入的情况下获得跟踪统计信息。我希望设置两个文档,并且每个文档都可以引用。在每个值中,都有一个值,例如 x 。该程序将能够生成一个数字,我希望能够通过添加生成的数字来更新给定文档中的数字。现在,我的代码如下:
f1 = open("player1records.txt", "a+")
f1.write(str(int(P1wins) + int(f1.read)))
但是,这引发了以下问题:
TypeError: int() argument must be a string, a bytes-like object or a number,
not 'builtin_function_or_method'
我该如何选择 x 并为其添加另一个数字,然后更新文档?
答案 0 :(得分:2)
别忘了将()添加到函数的末尾以调用它:
f1.write(str(int(P1wins) + int(f1.read()))) # not f1.read
答案 1 :(得分:0)
这种事情很难安全地完成,人们往往会得到这样的代码:
from os import replace
def updateRecords(value, filename="player1records.txt"):
try:
with open(filename) as fd:
prev = int(fd.read())
except (FileNotFoundError, ValueError):
prev = 0
changed = prev + value
# write to a temp file in case of failure while doing this
tmpname = filename + '~'
with open(tmpname, 'w') as fd:
fd.write(str(changed))
# perform atomic rename so we don't end up with a half written file
replace(tmpname, filename)
所有这些摆弄是为什么人们倾向于最终将这种复杂性隐藏在关系数据库的背后。 Python包括一个相对不错的SQLite
接口。如果一切都设置好了,您将能够做到:
with dbcon:
dbcon.execute(
"UPDATE player SET wins=wins + ? WHERE player_id = ?",
(P1wins, 1))
并让SQLite库处理平台特定的问题……