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(" ", ",")
没有任何运气。
答案 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。