web-dev-qa-db-ja.com

ワイルドカードを使用してリスト内の文字列を検索する

ワイルドカードを使用して、リスト内のいくつかのファイル名を探しています。

from datetime import date
dt = str("RT" + date.today().strftime('%d%m'))
print dt # RT0701

基本的に私はこのパターンを見つける必要がありますdt + "*.txt"

RT0701*.txt

このリストの内容:

l = ['RT07010534.txt', 'RT07010533.txt', 'RT02010534.txt']

Forループでそれを行うにはどうすればよいですか?

9
user2990084

これには fnmatch.filter() を使用できます:

import fnmatch
l = ['RT07010534.txt', 'RT07010533.txt', 'RT02010534.txt']
pattern = 'RT0701*.txt'
matching = fnmatch.filter(l, pattern)
print(matching)

出力:

['RT07010534.txt', 'RT07010533.txt']
12
Andy

このようなsth(別のオプションである正規表現を使用せずに)

matches = []
for file in list:
    if file.startswith(dt) and '.txt' == file[-4:]: matches.append(file)

print (matches)
1
Nikos M.

次のような正規表現を使用できます。

import re
pat = re.compile('%s.*\.txt' % dt)
for can in l:
    if(pat.search(can)):
        print can
1
Eric Renouf