迭代多个目录中的文件或python中的整个硬盘驱动器

时间:2014-11-06 22:24:59

标签: python operating-system glob

我有script.py文件,它遍历script.py文件所在目录中的特定文件。

脚本看起来像这样:

def my_funct(l):
     Does stuff:
          iterates over list of files
     Does stuff:
globlist = glob.glob('./*.ext')
my_funct(glob list)

我希望不仅可以遍历此目录中的* .ext文件,而且可以遍历此目录中所有目录中的所有.ext文件。

我正在阅读关于os.walk的信息没有意义。

感谢。

3 个答案:

答案 0 :(得分:1)

os.walk的一个例子。它搜索文件夹(和所有子文件夹)中的py文件并对行进行计数:

# abspath to a folder as a string
folder = '/home/myname/a_folder/'
# in windows:
# folder = r'C:\a_folder\'
# or folder = 'C:/a_folder/'

count = 0
lines = 0
for dirname, dirs, files in os.walk(folder):
    for filename in files:
        filename_without_extension, extension = os.path.splitext(filename)
        if extension == '.py':
            count +=1
            with open(os.path.join(dirname, filename), 'r') as f:
                for l in f:
                    lines += 1
print count, lines

答案 1 :(得分:1)

您可以scandir.walk(path) os.walk(path)使用pip install scandir。它可以为os.walk()提供更快的结果。这个模块包含在python35中,但您可以使用import os import scandir folder = ' ' #here your dir path print "All files ending with .py in folder %s:" % folder file_list = [] for paths, dirs, files in scandir.walk(folder): #for (paths, dirs, files) in os.walk(folder): for file in files: if file.endswith(".py"): file_list.append(os.path.join(paths, file)) print len(file_list),file_list 使用python27,python34。

我的代码在这里:

number

scandir.walk()可以在os.walk()中完全按照你想要的那样做。

我希望这个答案与您的问题和scandir

的文档匹配

答案 2 :(得分:0)

在Python标准库3.4和更高版本中,您可以使用pathlib

from pathlib import Path

files = Path().cwd().glob("**/*.ext")

它将返回生成器,其中包含当前目录和子目录中所有扩展名为“ .ext”的文件。您可以遍历这些文件

for f in files:
    print(f)
    # do other stuff

或者您可以一行完成:

for f in Path().cwd().glob("../*.ext"):
    print(f)
    # do other stuff