Python:递归使用正则表达式模式获取文件的路径名

时间:2017-04-20 06:21:45

标签: python regex python-3.x filepath

如果想要获取具有特定模式名称的所有文件的(绝对)文件路径(文件列表),如何在Python中完成(vix在unix上)。类似于bash命令find -regex 'pattern'的东西。我一直在寻找osglobos.path和此SO,但无法将它们整合在一起。

假设您想要匹配/.* [pat.txt] $ /的文件的绝对路径,并且您有下面的指示:

/home/me/dir1/dir1a/filepat.txt #1
/home/me/dir1/dir1a/file.txt
/home/me/dir1/dir1a/filepat.png
/home/me/dir2/filepat.txt #2
/home/me/dir3/dir3a/dir3ab/filepat
/home/me/dir3/dir3a/dir3ac/filepat.txt #3 
/home/me/dir3/dir3a/dir3ac/filepat.png

然后你会想要三条指示路径:

/home/me/dir1/dir1a/filepat.txt
/home/me/dir2/filepat.txt
/home/me/dir3/dir3a/dir3ac/filepat.txt

一次尝试是:

import fnmatch
import os 
start_path = "/home/me/" 
for root, dirs, files in os.walk(start_path):
    for filename in fnmatch.filter(files, ".*pat.txt"):
        print(os.path.join(start_path, filename))

2 个答案:

答案 0 :(得分:3)

这是一个使用正则表达式,但对于简单的情况,我会使用in运算符

的akash回答
import re
pattern = re.compile(r'.*pat\.txt$')

import fnmatch
import os 
start_path = "/home/me/" 
for root, dirs, files in os.walk(start_path):
    for filename in files:
        if pattern.find(filename):
            print(os.path.join(start_path, filename))

答案 1 :(得分:1)

您可以使用basenamein运算符

x = given list
>>> [i for i in x if 'pat.txt' in os.path.basename(i)]
['/home/me/dir1/dir1a/filepat.txt',
 '/home/me/dir2/filepat.txt',
 '/home/me/dir3/dir3a/dir3ac/filepat.txt']
相关问题