如何获取目录中的文件,包括所有子目录

时间:2009-06-05 06:27:08

标签: python

我正在尝试获取目录中所有日志文件(.log)的列表,包括所有子目录。

6 个答案:

答案 0 :(得分:80)

import os
import os.path

for dirpath, dirnames, filenames in os.walk("."):
    for filename in [f for f in filenames if f.endswith(".log")]:
        print os.path.join(dirpath, filename)

答案 1 :(得分:9)

你也可以使用glob模块和os.walk。

import os
from glob import glob

files = []
start_dir = os.getcwd()
pattern   = "*.log"

for dir,_,_ in os.walk(start_dir):
    files.extend(glob(os.path.join(dir,pattern))) 

答案 2 :(得分:7)

结帐Python Recursive Directory Walker。总之,os.listdir()和os.walk()是你的朋友。

答案 3 :(得分:1)

如果要在当前目录中列出,可以使用以下内容:

import os

for e in os.walk(os.getcwd()):
    print e

只需更改

即可
os.getcwd()

到其他路径以获得结果。

答案 4 :(得分:1)

我有一个解决方案:

import os
for logfile in os.popen('find . -type f -name *.log').read().split('\n')[0:-1]:
      print logfile

import subprocess
(out, err) = subprocess.Popen(["find", ".", "-type", "f", "-name", "*.log"], stdout=subprocess.PIPE).communicate()
for logfile in out.split('\n')[0:-1]:
  print logfile

这两个利用了find . -type f -name *.log

第一个更简单但不保证 添加-name *.log时为空格, 但只为find ../testdata -type f工作得很好 (在我的OS X环境中)。

使用子进程的第二个看起来更复杂,但这是白色空间安全的(同样,在我的OS X环境中)。

这是受Chris Bunch的启发, 在答案中 https://stackoverflow.com/a/3503909/2834102

答案 5 :(得分:0)

仅使用(嵌套)列表理解的单行解决方案:

import os

path_list = [os.path.join(dirpath,filename) for dirpath, _, filenames in os.walk('.') for filename in filenames if filename.endswith('.log')]