2017-06-20 51 views
0

我在ipython 5.1.0中做了一些(初學者)編程。ipython,找到特定的目錄

大約有100個目錄的名字像 Mix_XFUEL_0.5_XOXID_0.6_PHI_0.2,只有數字在變化。

我使用fnmatch來讀取名稱到程序中。 現在我需要的所有目錄,其中前兩個數字(後面XFUELXOXID)是相同的,如:

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_*'): 

但它不會工作。

怎麼辦?

回答

0

使用正則表達式,第二個捕獲組(\1)斷言,它需要(\d+(?:\.\d+)?)

(\d+(?:\.\d+)?)匹配匹配的第一個捕獲組帶小數點的任意十進制數或數

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

將匹配

  • 「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