我正在构建一个打开文件的函数,计算不同行上的整数之和,并在文件中添加一个新字符串" Total = sum'在一条新线上。我收到错误:无法在最终值上分配给运营商。这不是重复,因为我编辑了重复建议的方式并且仍然抛出错误。此外,我需要在每次迭代后保持总计。
这是我的功能:
def append_total(filename):
total=0
with open(filename) as contents:
for line in contents:
if line.isdigit():
total+=int(line)
else:
total=0
final='Total:'+total+end='\n'
contents.write(final)
return
答案 0 :(得分:2)
您的代码存在一些问题。
1)陈述
tflearn.dnn.fit
语法无效,看起来刚刚删除了final = ('Total:', total, end='\n')
,并将其替换为print
。如果你想让字符串写出类似
final
有关docs
的字符串连接的详细信息 2)您正在尝试写入未在写入模式下打开的文件,并在离开final = 'Total:' + str(total) + '\n'
语句块后关闭。如果要在现有文件的末尾添加一行,可以编写
with
有关docs
的with open(filename, mode='a') as contents:
contents.write(final)
的更多信息
3)您需要从行中删除换行符号,以使open
按预期工作,我们可以使用str.strip
方法执行此操作
str.isdigit
4)当任何行不是数字时,您累积的line.strip().isdigit()
将会丢失,我们可以通过删除total
块
最后你的功能就像
else
(你不需要在每个函数的末尾显式返回)
答案 1 :(得分:1)
首先你尝试写一个关闭文件
第二,您不打开文件进行写入或添加
def append_total(filename):
total=0
with open(filename) as contents:
for line in contents:
if line.isdigit():
total+=int(line)
else:
total=0
with open (filename, 'a') as contents: # a for append w for write
contents.write('Total:{}\n'.format(total))
` 在python中,当函数返回任何内容时,您可以省略return语句 或者,如果你想要明确,请说返回无。
抱歉没有阅读所有评论但你也遇到了问题 我更新了我的答案
答案 2 :(得分:1)
您的脚本存在以下几个问题:
final=('Total:', total, end='\n')
语法错误来自end='\n'
。您可能重写了print()
行,但在创建元组时不能使用该语法(这就是您现在所做的)。
更好的版本是:
final = 'Total:' + total + '\n'
但那会失败,因为你不能"添加"一个字符串和一个int。
您可以使用int(total)
,但使用format
方法会更好:
final = 'Total: {}\n'.format(total)
下一个问题是,您尝试在 with
块之后写入文件,这将导致另一个错误。将最后两行也移动到块中:
def append_total(filename):
total = 0
with open(filename) as contents:
for line in contents:
if line.isdigit():
total += int(line)
else:
total = 0
final = 'Total: {}\n'.format(total)
contents.write(final)
这仍然会失败,因为默认情况下,文件以只读方式打开。您必须为open()
提供一种模式:
with open('blah.txt', 'r+') as contents:
将打开文件可读/写,并且写入将附加到结尾(因为您在写入之前读取了整个文件)。
此外:永远不会更新总数,因为line
在结尾包含'\n'
个字符,而'1\n'.isdigit()
将返回False。在使用之前,您需要strip()
该行:
line.strip().isdigit():
我也摆脱了最后的return
,这是由Python隐含添加的。