Analizzare un file .txt
-
03-07-2019 - |
Domanda
Ho un file .txt come:
Symbols from __ctype_tab.o:
Name Value Class Type Size Line Section
__ctype |00000000| D | OBJECT |00000004| |.data
__ctype_tab |00000000| r | OBJECT |00000101| |.rodata
Symbols from _ashldi3.o:
Name Value Class Type Size Line Section
__ashldi3 |00000000| T | FUNC |00000050| |.text
Come posso analizzare questo file e ottenere le funzioni con il tipo FUNC? Inoltre, da questo txt come posso analizzare ed estrarre .o nome?
Come posso ottenerli tramite l'analisi saggia della colonna o in che modo.
Ho bisogno di un aiuto immediato ... In attesa di una soluzione appropriata come al solito
Soluzione
Penso che questo potrebbe costare meno dell'uso delle regex, anche se non sono del tutto chiaro su cosa stai cercando di realizzare
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]))
Ho imparato da altri post che è più economico e meglio racchiudere tutti i dati quando si legge un file per la prima volta. Pertanto, se si desidera racchiudere l'intero file di dati in un passaggio, è possibile invece eseguire le seguenti operazioni
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={}
Quindi, se si desidera il tipo Func, utilizzare quanto segue:
funcDict={}
for record in fullDict:
if fullDict[record]['Type']=='FUNC':
funcDict[record]=fullDict[record]
Scusatemi per essere così ossessivo, ma sto cercando di capire meglio come creare la comprensione dell'elenco e ho deciso che questo era degno di uno scatto
Altri suggerimenti
for line in open('thefile.txt'):
fields = line.split('|')
if len(fields) < 4: continue
if fields[3].trim() != 'FUNC': continue
dowhateveryouwishwith(line, fields)
Ecco un approccio di base. Cosa ne pensi?
# Suppose you have filename "thefile.txt"
import re
obj = ''
for line in file('thefile.txt'):
# Checking for the .o file
match = re.search('Symbols from (.*):', line)
if match:
obj = match.groups()[0]
# Checking for the symbols.
if re.search('|', line):
columns = [x.strip() for x in a.split('|')]
if columns[3] == 'FUNC':
print 'File %s has a FUNC named %s' % (obj, columns[0])