La utilidad lsof está capturando algunos datos que quiero convertir en un marco de datos Pandas. Sin embargo, los datos tienen este formato:

COMMAND     PID          USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Spotify     377 estebanvargas   43u  IPv4 0x9d9dad438c107359      0t0  TCP localhost:4381 (LISTEN)
Spotify     377 estebanvargas   70u  IPv4 0x9d9dad43945bc031      0t0  TCP *:57621 (LISTEN)

He estado tratando de hacer algo como (para cada fila):

row = data.loc[0]
row = row.replace(" ", ",")

Sin suerte.

0
Esteban Vargas 17 oct. 2018 a las 06:53

2 respuestas

La mejor respuesta

Este es un problema XY. Está intentando leer sus datos en un Pandas DataFrame. No necesita meterse con las comas.

Este es el formato de "ancho fijo". Utilice pandas.read_fwf.

import pandas as pd

raw_data = io.StringIO('''COMMAND     PID          USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
Spotify     377 estebanvargas   43u  IPv4 0x9d9dad438c107359      0t0  TCP localhost:4381 (LISTEN)
Spotify     377 estebanvargas   70u  IPv4 0x9d9dad43945bc031      0t0  TCP *:57621 (LISTEN)''')

data = pd.read_fwf(raw_data)

print(data)
#    COMMAND  PID           USER   FD  TYPE              DEVICE SIZE/OFF NODE                     NAME
# 0  Spotify  377  estebanvargas  43u  IPv4  0x9d9dad438c107359      0t0  TCP  localhost:4381 (LISTEN)
# 1  Spotify  377  estebanvargas  70u  IPv4  0x9d9dad43945bc031      0t0  TCP         *:57621 (LISTEN)

EDITAR: consulte la otra respuesta para ver una forma de generar una salida más fácilmente analizable desde lsof.

4
shadowtalker 17 oct. 2018 a las 04:55

No debe usar el formato lsof más legible para la entrada de otros programas. En su lugar, use lsof -F[information needed here]. lsof -F? le dirá qué caracteres usar justo después de -F para obtener diversos datos. Hace que el análisis de la información sea mucho más fácil de programar y mucho más preciso.

Además, debe usar 0 (como en lsof -F0[information needed here]) para evitar problemas con las nuevas líneas en los nombres de archivos, etc. Esto tendrá los campos de salida separados por caracteres NUL ('\0') y los registros de salida separados por nuevas líneas ('\n') para facilitar la división y el bucle.

man lsof tiene más información sobre cómo funciona en su sección OUTPUT FOR OTHER PROGRAMS.

1
Chai T. Rex 17 oct. 2018 a las 04:13