Python 将字符串附加到文件时出错,如何正确添加?

Python Error with appending string to a file, how do I add it correctly?

我正在构建一个函数,用于打开一个文件,计算不同行上的整数之和,并在新行上附加一个新字符串 '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 

嘿,在我看来你的代码中有两个 "error":

首先你尝试写入一个关闭的文件

其次您没有打开文件进行写入或添加

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什么都没有你可以省下return语句 或者如果你想明确地说 return None.

抱歉没有阅读所有评论,但您也对总计有疑问 我更新了我的回答

你的代码有几个问题。

1) 声明

final = ('Total:', total, end='\n')

的语法无效,看起来您刚刚删除了 print 并将其替换为对 final 的赋值。如果你想制作字符串,只需写类似

的东西
final = 'Total:' + str(total) + '\n'

有关字符串连接的更多信息,请访问 docs

2) 您正在尝试写入未在写入模式下打开且在您离开 with 语句块后关闭的文件。如果你想在现有文件的末尾追加一行,你可以写

with open(filename, mode='a') as contents:
    contents.write(final)

有关 open 的更多信息,请访问 docs

3) 您需要从行中删除换行符以使 str.isdigit 按预期工作,我们可以使用 str.strip 方法

来完成此操作
line.strip().isdigit()

4) 如果任何一行不是类似数字的行,您累积的 total 将会丢失,我们可以通过删除 else

来避免归零

最后你的函数会像

def append_total(filename):
    total = 0
    with open(filename) as contents:
        for line in contents:
            stripped_line = line.strip()
            if stripped_line.isdigit():
                total += int(stripped_line)
    final = 'Total:' + str(total) + '\n'
    with open(filename, mode='a') as contents:
        contents.write(final)

(您不需要在每个函数的末尾显式地 return)

你的脚本有几个问题:

final=('Total:', total, end='\n')

语法错误来自end='\n'。您可能重写了 print() 行,但在创建元组时不能使用该语法(您现在就是这样做的)。

更好的版本是:

final = 'Total:' + total + '\n'

但这会失败,因为你不能"add"一个字符串和一个整数。

您可以使用 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:

将打开文件 read/writable 并且写入将附加到末尾(因为您在写入之前读取了整个文件)。

进一步:总数永远不会更新,因为line末尾包含一个'\n'字符,而'1\n'.isdigit()会return假。在使用之前,您需要 strip() 该行:

line.strip().isdigit():

我也去掉了最后的 return,这是由 Python 隐式添加的。