如何用逗号分隔lsof捕获的数据?

时间:2018-10-17 03:53:38

标签: python pandas csv

lsof实用程序正在捕获一些我想变成Pandas数据框的数据。但是数据具有以下格式:

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)

我一直在尝试做类似的事情(每一行):

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

没有任何运气。

2 个答案:

答案 0 :(得分:4)

这是一个XY问题。您正在尝试将数据读取到Pandas DataFrame中。您无需弄乱逗号。

这是“固定宽度”格式。使用pandas.read_fwf

@string

编辑:请参见the other answer,了解一种从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) 生成更易于分析的输出的方法。

答案 1 :(得分:1)

您不应使用更​​易理解的lsof格式输入其他程序。而是使用lsof -F[information needed here]lsof -F?会告诉您-F之后要使用哪些字符来获取各种信息。它使解析信息变得更容易编程和更加精确。

此外,您应该使用0(如lsof -F0[information needed here])以避免文件名中的换行符出现问题。这将使输出字段用NUL字符('\0'分隔,输出记录用换行符('\n')分隔,以便于拆分和循环。

man lsof has more information on how it works in its OUTPUT FOR OTHER PROGRAMS section