0

次の形式のファイル名があります。

anytext_NUMBER_svm.pkl

次のようなディレクトリとファイルファイル内のすべてのファイルをループする必要があります。

file1.txt
file2.txt
anytext_1_svm.pkl
anytext_2_svm.pkl
anytext_3_svm.pkl

一致するファイルは次のようになります。

anytext_1_svm.pkl
anytext_2_svm.pkl
anytext_3_svm.pkl

これを行うためにPython正規表現を使用するにはどうすればよいですか?

4

5 に答える 5

2

次のオプション:

  • 使用しませんre
  • 比較がパスの一部ではなく、ファイル名の部分のみであることを確認します
  • を使用してさらに検証するファイル名パターンの数を制限しますiglob

コード:

from glob import iglob
import os.path
for fname in iglob('*_*_svm.pkl'):
    path, name = os.path.split(fname)
    anytext, digit, rest = name.split('_', 2) 
    if digit.isdigit(): # add criteria for anytext if required...
        # ....
于 2012-08-12T14:02:14.310 に答える
1

この正規表現はあなたの問題を解決する必要があります:

>>> import re
>>> regex = re.compile(r'.+_\d+_svm\.pkl')
>>> regex.search('anytext_1_svm.pkl') != None
True

ただし、必ずドキュメントを確認する必要があります: http://docs.python.org/library/re.html

于 2012-08-12T13:47:36.623 に答える
0

「anytext_NUMBER_svm.pkl」をキャッチする正規表現は非常に簡単です。

r'.+_\d+_svm\.pkl'
于 2012-08-12T13:47:16.080 に答える
0

このページのレビューをお勧めします: http://docs.python.org/py3k/library/re.html#module-re

正規表現の書き方を理解し、適切に照合していることを確認するのに役立ちます。番号については、[0-9]* を使用し、_ を使用してグループを区切り、一致チェックの条件付きのものを少し書きます。これは簡単なプロジェクトになります。

于 2012-08-12T13:47:19.393 に答える
0
import glob
file_list = glob.glob('anytext_[0-9]_svm.pk1')
于 2012-08-12T13:50:08.493 に答える