【问题标题】:Python script to search directory for certain file type then append their contents togetherPython脚本在目录中搜索特定文件类型,然后将它们的内容附加在一起
【发布时间】:2018-08-02 20:15:15
【问题描述】:

我正在尝试制作一个 Python 脚本,该脚本将在一个目录中搜索所有以特定文件扩展名为 .math 结尾的文件(基本上是一个包含数字的文本文件)。

我将如何处理?

假设我有文件 hello.math、hello2.math 和 goodbye.math

假设 hello.math 有 10 个,hello2.math 有 3 个,goodbye.math 有 0 个。

我希望脚本搜索当前目录中的所有 .math 文件,然后对它们进行汇总。

【问题讨论】:

  • 到目前为止你尝试过什么?向我们展示一些代码(或您遇到的错误),以便我们为您提供帮助
  • @Antoine 我还没有尝试过任何东西。我只是想在尝试之前找到最好的方法,因为我不确定该怎么做。
  • 我将执行以下步骤: 1-递归探索目录中包含的所有名称文件 2-检查正确的扩展名 3-如果扩展名是想要的,则打开并解析内容 4-增量在你的主程序中读取编号的变量?
  • @Antoine 好的,谢谢,我会尽量按照这个程序进行

标签: python-3.x file add


【解决方案1】:

所以不确定是要递归搜索目录结构,还是只列出一个目录中的文件。这应该能让你继续前进。

import os

MATH_FILES = list()

def single_dir(name)
    global MATH_FILES
    names = [os.path.join(name, item) for item in os.listdir(name)]
        for name in names:
           if ".math" in name and os.path.isfile(name):
               print("%s has .math in the name" % name)
               MATH_FILES.append(name)

def recursive(name):
    global MATH_FILES
    if ".math" in name and os.path.isfile(name):
        print("%s has .math in the name" % name)
        MATH_FILES.append(name)
    try:
        names = [os.path.join(name, item) for item in os.listdir(name)]
        for name in names:
            recurse(name)
    except:
        # Can't listdir() a file, so we expect this to except at the end of the tree.  
        pass

def sum_file_contents():
    value = int()
    for file in MATH_FILES:
        value += int(open(file, "r").read().strip())
    return value

if __name__ == "__main__":
    # Choose implemntation here
    # recursive("<insert base path here>")
    # single_dir("<insert base path here>")
    print(sum_file_contents())

所以有些事情......首先在 if 名称条件中,您需要选择 single_dir 或递归函数,并指定路径入口点(如 /dir 或 C:\dir 或其他)。如果文件中存在除 int 以外的任何内容,则 sum_file_contents 将失败。尽管您的示例说明这就是您要寻找的东西。

总之,如果您在提问之前先试一试就好了。我认为整个社区不是来为​​您编写代码,而是在您遇到困难时为您提供帮助。这是一个超级简单的问题。如果你用谷歌搜索目录中的文件,我敢打赌,实际上有几十个答案,这至少会给你一个代码示例的基础。然后你可以说我可以像这样找到我的 .math 文件,我该如何对它们求和?您可能也可以简单地找到该答案。请注意,我并不想对这一段无礼。

注意:我没有测试这段代码

【讨论】:

  • 谢谢。我并没有完全要求人们为我编写代码。我在问怎么做,采取什么步骤。不管怎样,谢谢你的帮助。
  • NP :) 就像我说的那样,我并不想变得粗鲁或给你带来困难,但有时你会因为提出这样的问题而受到抨击。如果您提出更具体的问题并谈论您对此事的看法,您通常会获得更大的吸引力和更快的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-22
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-10
相关资源
最近更新 更多