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

时间:2017-04-12 14:36:12

标签: python-3.x syntax fwrite

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

3 个答案:

答案 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隐含添加的。