Python 3.x 用于在目录中搜索特定文件扩展名并执行求和以将其内容添加到一起的后续操作
这是对我的建议的后续行动。基本上,这个想法是在/home/pi/math中添加以.math结尾的所有文件的内容。目录目前我有3个文件:test.math、hello.math、hi.math——所有这些文件至少有1.00个。问题是1。它似乎没有正确读取文件的内容,也没有将它们相加 其想法是,它将添加这3个文件(最终我想将它们添加到一个变量中)并显示总数。请注意,我确实希望包括浮动Python 3.x 用于在目录中搜索特定文件扩展名并执行求和以将其内容添加到一起的后续操作,python-3.x,file,sum,Python 3.x,File,Sum,这是对我的建议的后续行动。基本上,这个想法是在/home/pi/math中添加以.math结尾的所有文件的内容。目录目前我有3个文件:test.math、hello.math、hi.math——所有这些文件至少有1.00个。问题是1。它似乎没有正确读取文件的内容,也没有将它们相加 其想法是,它将添加这3个文件(最终我想将它们添加到一个变量中)并显示总数。请注意,我确实希望包括浮动 import os srcdir = "/home/pi/math/" files = os.listdir(sr
import os
srcdir = "/home/pi/math/"
files = os.listdir(srcdir)
def sum_file_contents():
value = float()
for file in srcdir:
if file.endswith(('math')):
value += float(open(file, "r").read().strip())
return value
for file in files:
if file.endswith(('math')):
print(file)
print(sum_file_contents())
输出
test.math
0.0
hello.math
0.0
hi.math
0.0
您的主
for
循环遍历来自os.listdir(srcdir)
的文件,但随后您的sum_file_contents()
尝试再次执行相同的操作,只是它以字符串形式遍历srcdir
,这自然不会给出目录列表。
循环的主是冗余的,您只需在迭代时调用os.listdir()
来修复sum\u file\u contents()
:
import os
srcdir = "/home/pi/math/"
def sum_file_contents():
value = float()
for file in os.listdir(srcdir):
if file.endswith(('math')):
value += float(open(os.path.join(srcdir, file), "r").read().strip())
return value
print(sum_file_contents())
即使文件中有更多带浮点数的行,这也可以处理。谢谢您的输入。你是对的,它是多余的。当我尝试这个版本的脚本时,我得到了以下错误code“Traceback(最后一次调用):文件“sumbalance.py”,第11行,在打印中(sum_文件内容())文件“sumbalance.py”,第9行,在sum_文件内容值+=float(打开(文件,“r”).read().strip())文件NotFoundError:[Errno 2]没有这样的文件或目录:“test.math”code
不幸的是,我真的不知道为什么会发生这种情况,特别是对于test.math。我明白了。这是因为os.listdir()
只返回没有路径名的文件名,您必须使用os.path.join()
将srcdir
添加到文件名之前。我已经用更正更新了我的答案。好的,谢谢你通知我,我不知道。脚本现在运行,但它只显示一个文件的内容,而不是所有文件的内容。在本例中,它显示1.25,这是test.math的值。这是因为它没有正确地循环所有文件吗?我明白了。我没有注意到您在for
循环中错误地缩进了返回值
,因此函数在第一次迭代结束时立即返回。只需将return
语句移出循环,它就可以工作了。我已经相应地更新了答案。啊,谢谢。对于所有的问题,我很抱歉,只是尽我最大的努力去学习,像这样的简单的事情一直吸引着我。谢谢你的输入,这很好。我很感激你教我一种不同的方法。
import os
srcdir = "/home/pi/math/"
files = os.listdir(srcdir)
def sum_file_contents(file):
value = 0.0
f = open(file,'r')
for line in f:
value += float(line.strip())
return value
total_value = 0.0
for file in files:
if file.endswith(('math')):
print(file)
print(sum_file_contents(file))
total_value += sum_file_contents(file)
print(total_value)