【问题标题】:How can I iterate over all files in all folders of one master folder? [duplicate]如何遍历一个主文件夹的所有文件夹中的所有文件? [复制]
【发布时间】:2019-11-03 06:14:11
【问题描述】:

所以我写了一个 Python 脚本,可以对某个 .txt 文件做某事:

with open("1.txt") as f:
    for line in f:
        #DoStuff

现在这适用于 1 个.txt 文件。 我有一个主文件夹,在主文件夹中我有不同的其他文件夹,并且在每个文件夹中我还有几个.txt 文件。

如何遍历所有这些以将我的脚本应用于主文件中每个文件夹中的每个 .txt 文件?

【问题讨论】:

  • “一个主文件夹” - 然后 - “主文件” --- 什么?
  • 很抱歉没有说清楚,我会再试一次:我有一个文件夹,在那个文件夹中我有几个文件夹。在几个文件夹中的每个文件夹中,我都有几个 .txt 文件,我想查看所有 .txt 文件
  • 你的问题很清楚,但是当我用不到一分钟的时间找到多个重复项时,很明显你没有努力自己解决这个问题
  • @Sayse 不要粗鲁地尝试实际提供帮助。这是我使用 Python 的第二天,我还在努力学习。我尝试在很多地方查找,我所能找到的只是遍历一个文件夹中的不同文件。

标签: python loops scripting


【解决方案1】:

您可以使用 python 中的 glob 模块

from glob import glob

file_list = glob("(folder path)/*/*")

这将为您提供子文件夹中所有文件路径的列表。

然后您可以迭代并执行您的操作。

【讨论】:

  • 要么改成from glob import glob要么改成glob.glob("(folder path)/*/*")
  • @Tomerikoo 忘记了,谢谢
【解决方案2】:

您可以为此使用 glob.iglob()os.walk()。 这里有一个小功能。

def list_of_files(path, extension, recursive=False):
    '''
    Return a list of filepaths for each file into path with the target extension.
    If recursive, it will loop over subfolders as well.
    '''
    if not recursive:
        for file_path in glob.iglob(path + '/*.' + extension):
            yield file_path
    else:
        for root, dirs, files in os.walk(path):
            for file_path in glob.iglob(root + '/*.' + extension):
                yield file_path

你需要import glob, os才能使用它。

在你的情况下:

for file in list_of_files(path='master_folder_path_here', extension='txt'):
    ...

【讨论】:

    【解决方案3】:

    你可以使用 os.walk()

    import os
    
    path = 'c:\\projects\\hc2\\'
    
    files = []
    # r=root, d=directories, f = files
    for r, d, f in os.walk(path):
        for file in f:
            if '.txt' in file:
                files.append(os.path.join(r, file))
    
    for f in files:
        print(f)
    

    输出:

    c:\projects\hc2\app\readme.txt
    c:\projects\hc2\app\release.txt
    c:\projects\hc2\web\readme.txt
    c:\projects\hc2\whois\download\afrinic.txt
    c:\projects\hc2\whois\download\apnic.txt
    c:\projects\hc2\whois\download\arin.txt
    c:\projects\hc2\whois\download\lacnic.txt
    c:\projects\hc2\whois\download\ripe.txt
    c:\projects\hc2\whois\out\test\resources\asn\afrinic\3068.txt
    c:\projects\hc2\whois\out\test\resources\asn\afrinic\37018.txt
    

    【讨论】:

    • 正在写相同的答案... :) 我会将扩展检查移到最后一个 for 循环并删除列表。也将使用 os 方法来提取扩展名 - os.path.splitext()[1]
    猜你喜欢
    • 2020-08-09
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 2017-04-06
    • 1970-01-01
    相关资源
    最近更新 更多