0

我在这里工作,我完全糊涂了。基本上,我的目录中有脚本,并且该脚本必须在具有特定扩展名的多个文件夹上运行。现在,我在一个文件夹上启动并运行它。这是结构,我有一个主文件夹,比如 Python,里面有多个文件夹,所有文件夹都具有相同的 .ext,在每个子文件夹中,我又有几个文件夹,里面有工作文件。现在,我想让脚本访问整个路径,比如说,我们在主文件夹'python'里面,里面有folder1.ext->sub-folder1->working-file,再次出来回到主文件夹“Python”并开始访问第二个目录。现在我脑子里有很多东西,glob 模块、os.walk 或 for 循环。我弄错了逻辑。

说,Path=r'\path1'

我该如何开始?非常感谢任何帮助。

4

3 回答 3

0

我不确定这是否是您想要的,但是这个带有递归辅助函数的 main 函数会获取主目录中所有文件的字典:

import os, os.path

def getFiles(path):
    '''Gets all of the files in a directory'''
    sub = os.listdir(path)
    paths = {}
    for p in sub:
        print p
            pDir = os.path.join(path, p)
        if os.path.isdir(pDir): 
            paths.update(getAllFiles(pDir, paths))
        else:
            paths[p] = pDir
    return paths

def getAllFiles(mainPath, paths = {}):
    '''Helper function for getFiles(path)'''
    subPaths = os.listdir(mainPath)
    for path in subPaths:
        pathDir = os.path.join(path, p)
        if os.path.isdir(pathDir):
            paths.update(getAllFiles(pathDir, paths))
        else:
                paths[path] = pathDir
    return paths    

这将返回形式为 的字典{'my_file.txt': 'C:\User\Example\my_file.txt', ...}

于 2013-04-29T14:39:01.943 回答
0

由于您将第一级目录与其子目录区分开来,因此您可以执行以下操作:

# this is a generator to get all first level directories
dirs = (d for d in os.listdir(my_path) if os.path.isdir(d)
        and os.path.splitext(d)[-1] == my_ext)

for d in dirs:
    for root, sub_dirs, files in os.walk(d):
        for f in files:
            # call your script on each file f
于 2013-04-29T15:53:25.587 回答
0

您可以使用Formic(披露:我是作者)。Formic 允许您指定一个多目录 glob 来匹配您的文件,从而消除目录遍历:

import formic
fileset = formic.FileSet(include="*.ext/*/working-file", directory=r"path1")

for file_name in fileset:
    # Do something with file_name

有几点需要注意:

  • /*/匹配每个子目录,同时/**/递归地下降到每个子目录,它们的子目录等等。一些选项:
    • 如果工作文件恰好是您的下一个目录*.ext,则使用/*/
    • 如果工作文件位于 下的任何深度*.ext,则/**/改为使用。
    • 如果工作文件至少是一个目录,那么您可以使用/*/**/
  • Formic 开始在当前工作目录中搜索。如果这是正确的目录,您可以省略directory=r"path1"
  • 我假设工作文件的字面意思是working-file. 如果不是,请替换一个与之匹配的 glob,例如*.shor script-*
于 2013-05-01T01:58:34.377 回答