使用python读取相应的列

时间:2016-08-12 10:29:25

标签: python

我的输出格式为:

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的所有邻居。

请建议我怎么做? 任何帮助表示赞赏。提前谢谢!

4 个答案:

答案 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