2017-06-20 14 views
0

ipython 5.1.0でいくつかの(初心者の)プログラミングを行います。ipython、特定のディレクトリを見つける

Mix_XFUEL_0.5_XOXID_0.6_PHI_0.2のような名前のディレクトリが約100ありますが、数字だけが変更されています。

私はfnmatchを使用して、名前をプログラムに読み込みます。私が試した

Mix_XFUEL_0.5_XOXID_0.5_PHI_0.2 
Mix_XFUEL_0.5_XOXID_0.5_PHI_0.4 
Mix_XFUEL_0.5_XOXID_0.5_PHI_0.6 

Mix_XFUEL_0.6_XOXID_0.6_PHI_0.2 
Mix_XFUEL_0.6_XOXID_0.6_PHI_0.4 
Mix_XFUEL_0.6_XOXID_0.6_PHI_0.6 

i = '0.5' 
fnmatch.fnmatch(file, 'Mix_XFUEL_'i'_XOXID_'i'_PHI_*'): 

は、今私は(XFUELXOXIDの背後にある)最初の2つの数字は次のように、同様にされたすべてのディレクトリを、必要としますそれは動作しません。

どうすればできますか?

使用正規表現、第二キャプチャグループ(\1)が、これは

と一致します

import re 
re.match(r'Mix_XFUEL_(\d+(?:\.\d+)?)_XOXID_(\1)_PHI', infile) 

小数点と一致

(\d+(?:\.\d+)?)(\d+(?:\.\d+)?)

第一キャプチャグループに一致するように任意の10進数または番号が必要と主張し

答えて

0
  • "Mix_X FUEL_0.5_XOXID_0.5_PHI_0.2"
  • "Mix_XFUEL_0.6_XOXID_0.6_PHI_0.2"
  • "Mix_XFUEL_5_XOXID_5_PHI_0.2"

なく

  • 「Mix_XFUEL_0.5_XOXID_0.6_PHI_0.2
+0

偉大な答え、ありがとう。私は正規表現に深く入るでしょう... – newbieTheNewest

0
import os, re 
from collections import defaultdict 

results = defaultdict(list) 
for file in os.listdir('/path/to/your/directory'): 
    m = re.match(r'Mix_XFUEL_(.*?)_XOXID_(.*?)_PHI_.*', file) 
    if m: 
     numbers = m.group(1,2) 
     results[numbers].append(file) 

for r in results: 
    print(results[r]) 
+0

ありがとうございました。正規表現の "周りの"コードは私にも大いに役立ちます。他の答えの正規表現と組み合わせて、これはかなり適切に適合します。 – newbieTheNewest

関連する問題