Pregunta

Tengo un archivo .txt como:

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

¿Cómo puedo analizar este archivo y obtener las funciones con el tipo FUNC? Además, desde este txt, ¿cómo puedo analizar y extraer el nombre .o?

¿Cómo puedo obtenerlos mediante el análisis inteligente de la columna o cómo?

Necesito una ayuda inmediata ... Esperando una solución adecuada como de costumbre

¿Fue útil?

Solución

Creo que esto podría costar menos que el uso de expresiones regulares, aunque no estoy del todo claro sobre lo que estás tratando de lograr

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]))

Aprendí de otras publicaciones que es más barato y mejor resumir todos los datos cuando estás leyendo un archivo por primera vez. Por lo tanto, si desea resumir todo el archivo de datos en una sola pasada, puede hacer lo siguiente

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={}

Luego, si quieres el tipo de función, utilizarías lo siguiente:

funcDict={}
for record in fullDict:
    if fullDict[record]['Type']=='FUNC':
        funcDict[record]=fullDict[record]

Lo siento por ser tan obsesivo, pero estoy tratando de tener una mejor idea de cómo crear una lista de comprensión y decidí que esto era digno de una inyección

Otros consejos

for line in open('thefile.txt'):
  fields = line.split('|')
  if len(fields) < 4: continue
  if fields[3].trim() != 'FUNC': continue
  dowhateveryouwishwith(line, fields)

Aquí hay un enfoque básico. ¿Qué piensas?

# 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])
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top