过滤目录中文件和加入目录路径的方法 - 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']
给定后缀和目录路径,我需要提取目录中以给定后缀结尾的文件的完整路径。
目前,我是这样做的:
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']