如何从os.walk中排除文件扩展名

时间:2016-02-09 13:31:30

标签: python-2.6 os.walk

我想搜索文件,但包含.txt文件的文件除外。怎么做 ? 目前我的代码正在搜索扩展名为.txt的文件。怎么做相反?

src = raw_input("Enter source disk location: ")
src = os.path.abspath(src)
print "src--->:",src
for dir,dirs,_ in os.walk(src, topdown=True):

    file_path = glob.glob(os.path.join(dir,"*.txt"))

1 个答案:

答案 0 :(得分:3)

使用列表推导过滤文件:

for dir, dirs, files in os.walk(src):
    files = [os.path.join(dir, f) for f in files if not f.endswith('.txt')]

我删除了topdown=True参数;这是默认值。

请勿将glob.glob()os.walk()结合使用;两种方法都在操作系统中查询目录中的文件名。您已经os.walk()的每次迭代中的第三个值中拥有这些文件名。

如果要跳过整个目录,请使用any() function查看是否有匹配的文件,然后使用continue忽略此目录:

for dir, dirs, files in os.walk(src):
    if any(f.endswith('.txt') for f in files):
        continue  # ignore this directory

    # do something with the files here, there are no .txt files.
    files = [os.path.join(dir, f) for f in files]

如果要忽略此目录及其所有后代,请使用切片分配清除dirs变量:

for dir, dirs, files in os.walk(src):
    if any(f.endswith('.txt') for f in files):
        dirs[:] = []  # do not recurse into subdirectories
        continue      # ignore this directory

    # do something with the files here, there are no .txt files.
    files = [os.path.join(dir, f) for f in files]