0

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

目前,我正在这样做:

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,但我不确定它的语法是什么。

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

4

1 回答 1

4

您可以使用 alist 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对于大目录,使用which 返回迭代器可能是明智的。这会更快。

>>> [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']
于 2016-10-06T07:12:35.607 回答