我的输出格式为:
Neighbor InQ OutQ Up/Down State
10.230.3.2 0 0 33w5d 1177
10.230.4.2 0 0 33w4d 1175
125.62.173.253 0 0 8w3d 2637
125.62.173.254 0 0 1w3d 2657
如果state为> = 0,我想读取邻居(例如10.230.3.2)。同样,我想读取对应状态列为> = 0的所有邻居。
请建议我怎么做? 任何帮助表示赞赏。提前谢谢!
答案 0 :(得分:0)
不是100%确定您要求的内容以及您拥有此数据的格式,但如果Neighbour
> = 0,则会打印列State
。您可以根据自己的要求将其移动到列表或元组或字典中。
编辑:假设文件每个条目只有一个空格,并且您使用空格格式化它将起作用
with open("filename.txt", "r") as f:
for row in f:
data = row.split(" ")
if data[4]>=0:
print data[0]
答案 1 :(得分:0)
您可以使用pandas。
>>> import pandas as pd
>>> data_set = [('10.230.3.2', 0, 0, '33w5d', 1177), ('10.230.4.2', 0, 0, '33w5d', 1175), ('125.62.173.253', 0, 0, '8w3d', 2637), ('125.62.173.254', 0, 0, '1w3d', 2657), ('127.0.0.1', 0, 0, '1w0d', -1)]
>>> df = pd.DataFrame(data = data_set, columns=['Neighbour', 'InQ', 'OutQ', 'Up/Down', 'State'])
>>> df
Neighbour InQ OutQ Up/Down State
0 10.230.3.2 0 0 33w5d 1177
1 10.230.4.2 0 0 33w5d 1175
2 125.62.173.253 0 0 8w3d 2637
3 125.62.173.254 0 0 1w3d 2657
4 127.0.0.1 0 0 1w0d -1
>>> df[df.State >=0 ]['Neighbour']
0 10.230.3.2
1 10.230.4.2
2 125.62.173.253
3 125.62.173.254
Name: Neighbour, dtype: object
>>> df[df.State <0 ]['Neighbour']
4 127.0.0.1
Name: Neighbour, dtype: object
pandas
可通过pip
获得。
答案 2 :(得分:0)
虽然我认为Nehal使用熊猫的答案对于这种情况非常理想。
您也可以尝试这种方式并根据您的要求进行调整 -
>>> for i in range(1, len(t)):
... temp = t[i].split()
... if int(temp[4]) >= 0:
... print temp[0]
...
10.230.3.2
10.230.4.2
125.62.173.253
125.62.173.254
如果您希望将其写入.txt文件
t = tuple(open('source_filename', 'r'))
tfile = open('destination_filename', 'a')
for i in range(1, len(t)):
temp = t[i].split()
if int(temp[4]) >= 0:
tfile.write('%s\n' % temp[0])
tfile.close()
答案 3 :(得分:0)
我之前从未使用过Pandas,但我阅读了Nehal的链接文档并将此解决方案基于his answer。这是对您的评论的回应:
我可以通过文本文件将数据添加到df吗?因为我有很多像这样的数据,所以无法手动输入数据。
要从文本文件中读取以下代码,您只需将StringIO
替换为实际文件句柄(例如with open("data_table.txt") as f:...
)。
from io import StringIO
import pandas as pd
DATA = """
Neighbor InQ OutQ Up/Down State
10.230.3.2 0 0 33w5d 1177
10.230.4.2 0 0 33w4d 1175
125.62.173.253 0 0 8w3d 2637
125.62.173.254 0 0 1w3d 2657
111.11.111.111 0 0 1w3d -1
"""
def main():
data_io = StringIO(DATA)
table = pd.read_table(data_io, sep='\s+')
print("Valid neighbours:\n{}\n".format(table[table.State >= 0]['Neighbor']))
print("Invalid neighbours:\n{}".format(table[table.State < 0]['Neighbor']))
if __name__ == '__main__':
main()
<强>输出强>
Valid neighbours:
0 10.230.3.2
1 10.230.4.2
2 125.62.173.253
3 125.62.173.254
Name: Neighbor, dtype: object
Invalid neighbours:
4 111.11.111.111
Name: Neighbor, dtype: object