过滤目录中文件和加入目录路径的方法 - Python

Ways to filter files in directory and join directory path - Python

给定后缀和目录路径,我需要提取目录中以给定后缀结尾的文件的完整路径。

目前,我是这样做的:

import os
dir_path = '/path/to/dir'
suffix = '.xyz'
filenames = filter(lambda x: x.endswith(suffix), os.listdir(dir_path))
filenames = map(lambda x: os.path.join(dir_path, x), filenames)

我也可以用 glob:

import glob
dir_path = '/path/to/dir'
suffix = '.xyz'
glob.glob(dir_path+'*.'+suffix)

我知道还有 pathlib 可以使用 PurePath 检查后缀,但我不确定它的语法是什么。

是否有其他方法可以实现相同的文件完整路径过滤列表?

您可以使用 list comprehension 一次性构建结果:

>>> [os.path.join(os.sep, x, dir_path) for x in os.listdir(dir_path) 
if x.endswith(suffix)]
['/home/msvalkon/foo.txt', 
 '/home/msvalkon/output.txt',
 '/home/msvalkon/remaining_warnings.txt',
 '/home/msvalkon/test.txt',
 '/home/msvalkon/hdr_chksum_failure.txt']

如果 dir_path 始终是绝对路径,您可以使用 os.path.abspath(x) 代替 os.path.join()

对于大目录,使用 os.scandir 其中 returns 迭代器可能是明智的。这样会更快。

>>> [entry.path for entry in os.scandir(dir_path) if entry.name.endswith(suffix)]
 ['/home/msvalkon/foo.txt', 
  '/home/msvalkon/output.txt',
  '/home/msvalkon/remaining_warnings.txt',
  '/home/msvalkon/test.txt',
  '/home/msvalkon/hdr_chksum_failure.txt']