Python:递归使用Regex模式获取文件名



如果一个人要获取所有文件的(绝对(文件路径(文件列表(,其中包含某些模式的名称,该名称如何在Python中完成(UNIX上的v 3.5(。类似于bash命令find -regex 'pattern'的东西。我一直看着OS,Glob,Os.Path等等,但无法将其放在一起。

说您需要绝对的路径到匹配的文件/.* [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))

这是使用Regexes的,但是对于简单的情况,我将使用in Operator

使用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))

您可以使用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']

最新更新