2017-04-20 9 views
2

特定のパターンの名前を持つすべてのファイルの(絶対)ファイルパス(ファイルリスト)を取得したい場合は、これをPythonでどうやって行うことができますか? bashコマンドのようなものfind -regex 'pattern'私はosglobos.path、これはSOとなっていますが、まとめることはできません。Python:regexパターンを再帰的に使用するファイルのパス名を取得

あなたが/.*[pat.txt]$/に一致するファイルへの絶対パスをしたいとあなたは以下のdiretoriesを持って言う:

/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 

その後、あなたは3のパスを示したいになるだろう:

/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)) 
+1

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)) 
- しかし、良いキャッチ –

+0

恥ずかしい:-)記事のタイトルにスペルが間違って – user3375672

+0

は心配しないで、私は "デバッグモード"だった;-) –

答えて

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'] 
+0

ああ私は完全に 'basename'を逃した – user3375672

+1

しかし、この解決策も' filepat.txt.bak'のようなファイルをフェッチします –

+0

それを修正するには、 'i.endswith( 'pat.txt')'を使用してください。 –

1

は、正規表現を使用して1であるが、私はakash`sとなるだろう単純なケースのためにinオペレータ

を使用して答えるPythonは
+0

私は近くにいました。私はあなたのことは非常に一般的だと思う(+1) – user3375672

関連する問題