我正在尝试获取目录中所有日志文件(.log)的列表,包括所有子目录。
答案 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')]