2017-06-20 93 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

相关问题