我有一个清单:
['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”和“???”?
谢谢,
答案 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'
或者,您可以将filter
与str.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' ...