如何获取元素在列表中具有相似的名称?

时间:2015-02-02 15:09:38

标签: python string list filter

我有一个清单:

['15g', 'engout', 'ImpactTphase.py', 'LANL.INI', 'OUTGRAF.TXT', 'OUTPAR.TXT', 'par.bat', 'pargraf1.BAT', 'parphase.py', 'RFFLD000.TBL', 'RFFLD010.TBL', 'sp4.acc', 'Tablplot.log', 'tape2.t2', 'tape3.t3', 'TIMESTEPEMITTANCE185.TBL', 'TIMESTEPEMITTANCE190.TBL', 'TIMESTEPEMITTANCE195.TBL', 'TIMESTEPEMITTANCE200.TBL', 'TIMESTEPEMITTANCE205.TBL', 'TIMESTEPEMITTANCE210.TBL', 'TIMESTEPEMITTANCE215.TBL', 'TIMESTEPEMITTANCE220.TBL', 'TIMESTEPEMITTANCE225.TBL', 'TIMESTEPEMITTANCE230.TBL', 'TIMESTEPEMITTANCE235.TBL', 'TIMESTEPEMITTANCE240.TBL', 'TplotPRF.TXT']

在python中,如何获取元素TIMESTEPEMITTANCE???.TBL。我怎么能分开“TIMESTEPEMITTANCE ???”进入“TIMESTEPEMITTANCE”和“???”? 谢谢,

2 个答案:

答案 0 :(得分:4)

您可以使用fnmatch.fnmatch

>>> lst = [
    '15g', 'engout', 'ImpactTphase.py', 'LANL.INI', 'OUTGRAF.TXT', 'OUTPAR.TXT',
    'par.bat', 'pargraf1.BAT', 'parphase.py', 'RFFLD000.TBL', 'RFFLD010.TBL',
    'sp4.acc', 'Tablplot.log', 'tape2.t2', 'tape3.t3', 'TIMESTEPEMITTANCE185.TBL',
    'TIMESTEPEMITTANCE190.TBL', 'TIMESTEPEMITTANCE195.TBL', 'TIMESTEPEMITTANCE200.TBL',
    'TIMESTEPEMITTANCE205.TBL', 'TIMESTEPEMITTANCE210.TBL', 'TIMESTEPEMITTANCE215.TBL',
    'TIMESTEPEMITTANCE220.TBL', 'TIMESTEPEMITTANCE225.TBL', 'TIMESTEPEMITTANCE230.TBL',
    'TIMESTEPEMITTANCE235.TBL', 'TIMESTEPEMITTANCE240.TBL', 'TplotPRF.TXT'
]
>>> import fnmatch
>>> [x for x in lst if fnmatch.fnmatch(x, 'TIMESTEPEMITTANCE???.TBL')]
['TIMESTEPEMITTANCE185.TBL',
 'TIMESTEPEMITTANCE190.TBL',
 'TIMESTEPEMITTANCE195.TBL',
 'TIMESTEPEMITTANCE200.TBL',
 'TIMESTEPEMITTANCE205.TBL',
 'TIMESTEPEMITTANCE210.TBL',
 'TIMESTEPEMITTANCE215.TBL',
 'TIMESTEPEMITTANCE220.TBL',
 'TIMESTEPEMITTANCE225.TBL',
 'TIMESTEPEMITTANCE230.TBL',
 'TIMESTEPEMITTANCE235.TBL',
 'TIMESTEPEMITTANCE240.TBL']

对于第二个问题,如果你的意思是从字符串中提取数字部分:

您可以使用字符串切片,因为模式已修复:

>>> 'TIMESTEPEMITTANCE185.TBL'[17:20]
'185'

或者,您可以将filterstr.isdigit一起使用(如果您使用Python 2.x,则不需要''.join

>>> ''.join(filter(str.isdigit, 'TIMESTEPEMITTANCE185.TBL'))
'185'

或者,使用正则表达式:

>>> import re
>>> re.search(r'\d+', 'TIMESTEPEMITTANCE185.TBL').group()
'185'

答案 1 :(得分:1)

如果您希望收集的元素是由' TIMESTEPEMITTANCE'您可以在迭代列表时对字符串进行切片,以便字符串中的字符串与您要搜索的关键字匹配,例如:

>>> lst = ['15g', 'engout', 'ImpactTphase.py', 'LANL.INI', 'OUTGRAF.TXT', 'OUTPAR.TXT', 'par.bat', 'pargraf1.BAT', 'parphase.py', 'RFFLD000.TBL', 'RFFLD010.TBL', 'sp4.acc', 'Tablplot.log', 'tape2.t2', 'tape3.t3', 'TIMESTEPEMITTANCE185.TBL', 'TIMESTEPEMITTANCE190.TBL', 'TIMESTEPEMITTANCE195.TBL', 'TIMESTEPEMITTANCE200.TBL', 'TIMESTEPEMITTANCE205.TBL', 'TIMESTEPEMITTANCE210.TBL', 'TIMESTEPEMITTANCE215.TBL', 'TIMESTEPEMITTANCE220.TBL', 'TIMESTEPEMITTANCE225.TBL', 'TIMESTEPEMITTANCE230.TBL', 'TIMESTEPEMITTANCE235.TBL', 'TIMESTEPEMITTANCE240.TBL', 'TplotPRF.TXT']
>>> s = len('TIMESTEPEMITTANCE')
>>> [x for x in lst if x[:s]=='TIMESTEPEMITTANCE']
['TIMESTEPEMITTANCE185.TBL', 'TIMESTEPEMITTANCE190.TBL', 'TIMESTEPEMITTANCE195.TBL', 'TIMESTEPEMITTANCE200.TBL', 'TIMESTEPEMITTANCE205.TBL', 'TIMESTEPEMITTANCE210.TBL', 'TIMESTEPEMITTANCE215.TBL', 'TIMESTEPEMITTANCE220.TBL', 'TIMESTEPEMITTANCE225.TBL', 'TIMESTEPEMITTANCE230.TBL', 'TIMESTEPEMITTANCE235.TBL', 'TIMESTEPEMITTANCE240.TBL']

在数字情况下你可以像这样使用.join()和.isdigit()来获得数字:

>>> int(''.join(c for c in 'TIMESTEPEMITTANCE240.TBL' if ele.isdigit()))
240

另一种方法是使用正则表达式。

要检查扩展名是否相同,您可以检查扩展名是否在字符串中:

>>> if '.TBL' in 'TIMESTEPEMITTANCE240.TBL' ...