【问题标题】:Followup for searching directory for a specific file extension and performing a sum to add their contents together为特定文件扩展名搜索目录并执行求和以将其内容添加在一起的后续操作
【发布时间】:2018-08-03 01:10:05
【问题描述】:

这是对我的previous post 的跟进。本质上,这个想法是将所有以 .math 结尾的文件的内容添加到 /home/pi/math 中。目录。目前我有 3 个文件:test.math、hello.math、hi.math - 它们都至少有 1.00。问题在于 1. 它似乎没有正确读取文件的内容,也没有将它们加起来。

这个想法是,它将添加这 3 个文件(最终我想将它们添加到一个变量中)并显示总数。请注意,我确实想包含浮点数。

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

【问题讨论】:

    标签: python-3.x file sum


    【解决方案1】:

    您的主要for 循环遍历来自os.listdir(srcdir)files,但随后您的sum_file_contents() 尝试再次执行相同的操作,除了它以字符串的形式遍历srcdir,这很自然不给你目录列表。主要的for 循环是多余的,您应该通过在迭代它时调用os.listdir() 来简单地修复sum_file_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 (most recent call last): File "sumbalance.py", line 11, in <module> print(sum_file_contents()) File "sumbalance.py", line 9, in sum_file_contents value += float(open(file, "r").read().strip()) FileNotFoundError: [Errno 2] No such file or directory: 'test.math'" code 不幸的是,我真的不知道为什么会发生这种情况,尤其是对于 test.math。
    • 我明白了。这是因为os.listdir() 只返回没有路径名的文件名,您必须使用os.path.join()srcdir 添加到文件名前。我已经用更正更新了我的答案。
    • 好的,谢谢你通知我,我不知道。该脚本现在运行,但它只显示一个文件的内容而不是所有文件。在这种情况下,它显示 1.25,这是 test.math 的数量。这是因为它没有正确循环所有文件吗?
    • 我明白了。我没有注意到您在for 循环中不正确地缩进了return value,因此该函数在第一次迭代结束时立即返回。只需将return 语句移到循环之外,它就可以工作。我已经相应地更新了答案。
    • 啊,谢谢。很抱歉所有的问题,只是尽我所能去学习,像这样简单的事情一直吸引着我。
    【解决方案2】:
    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)
    

    即使文件中有更多带有浮点数的行,这也会处理。

    【讨论】:

    • 感谢您的意见,太好了。感谢您教我一种不同的方法来做到这一点。
    猜你喜欢
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2014-10-18
    • 1970-01-01
    相关资源
    最近更新 更多