Я думаю, что это может стоить меньше, чем использование регулярных выражений, хотя я не совсем понимаю, чего вы пытаетесь достичь
symbolList=[]
for line in open('datafile.txt','r'):
if '.o' in line:
tempname=line.split()[-1][0:-2]
pass
if 'FUNC' not in line:
pass
else:
symbolList.append((tempname,line.split('|')[0]))
Я узнал из других постов, что дешевле и лучше обернуть все данные, когда вы читаете файл в первый раз. Таким образом, если вы хотите обернуть весь файл данных за один проход, вместо этого вы можете сделать следующее
fullDict={}
for line in open('datafile.txt','r'):
if '.o' in line:
tempname=line.split()[-1][0:-2]
if '|' not in line:
pass
else:
tempDict={}
dataList=[dataItem.strip() for dataItem in line.strip().split('|')]
name=dataList[0].strip()
tempDict['Value']=dataList[1]
tempDict['Class']=dataList[2]
tempDict['Type']=dataList[3]
tempDict['Size']=dataList[4]
tempDict['Line']=dataList[5]
tempDict['Section']=dataList[6]
tempDict['o.name']=tempname
fullDict[name]=tempDict
tempDict={}
Тогда, если вам нужен тип Func, вы должны использовать следующее:
funcDict={}
for record in fullDict:
if fullDict[record]['Type']=='FUNC':
funcDict[record]=fullDict[record]
Извините за то, что я так одержим, но я пытаюсь лучше разобраться в создании списочных представлений, и я решил, что это стоит того, чтобы попробовать