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