提取使用Python一个txt文件只所需的列?

问题描述 投票:2回答:4

我写了一个脚本,Cisco交换机数据输出到一个文本文件。我想分析这些文件只提取我使用Python从他们所需要的信息。下面是在文本文件中的数据的一个例子:

VLAN         Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1        default                          active    Gi0/3, Gi1/0, Gi1/1, Gi1/2, Gi1/3, Gi2/1, Gi2/2, Gi2/3

95        MGMT-VLAN95                      active    Gi0/2

1002        fddi-default                     act/unsup

1003        token-ring-default               act/unsup

1004         fddinet-default                  act/unsup

1005        trnet-default                    act/unsup p

1005        trnet-default                    act/unsup

用我有限的Python的知识,我曾尝试通过以下操作来实现这一点,但我不管理,以达到我的心愿:

with open('newfile', 'rw') as newfile:
    list = newfile.readlines()
    for row in list:
        x = (row.strip().split())
        print(x)
  • 打印(x)返回下面输出,但是当我尝试使用索引和调用打印(X [1])我接收回溯错误消息给此线。
['VLAN', 'Name', 'Status', 'Ports']
['----', '--------------------------------', '---------', '-------------------------------']
['1', 'default', 'active', 'Gi0/3,', 'Gi1/0,', 'Gi1/1,', 'Gi1/2,', 'Gi1/3,', 'Gi2/0,', 'Gi2/1,', 'Gi2/2,', 'Gi2/3,', 'Gi3/0,', 'Gi3/1,', 'Gi3/2,', 'Gi3/3']
['95', 'MGMT-VLAN95', 'active', 'Gi0/2']
['1002', 'fddi-default', 'act/unsup']
['1003', 'token-ring-default', 'act/unsup']
['1004', 'fddinet-default', 'act/unsup']
['1005', 'trnet-default', 'act/unsup', 'p']
['1005', 'trnet-default', 'act/unsup']

下面是我希望的输出:

VLAN Name 
---- -------------------------------- 
1    default
95   VLAN-MGMT95
200  VLAN200
1002 fddi-default
1003 token-ring-default
1004 fddinet-default
1005 trnet-default
python python-3.x
4个回答
1
投票

不知道你的回溯是的,但我会建议使用下列内容:

with open('newfile', 'rw') as newfile:
    lines = newfile.readlines()
    for row in lines:
        x = row.strip().split()
        if len(x) >= 2:
            print(x[0].ljust(4) + ' ' + x[1])

这将避免与畸形的线条从弹起造成IndexError例外可能出现的问题。此外,通过ljust(4)左对齐的VLAN列字符串以四个空格给出了更好的输出格式。


1
投票

如果你只是想前两列只是这样做:

with open('newfile', 'rw') as nf:
    mylist = nf.readlines()
    for row in mylist:
        mydata = row[0] + " " + row[1]
        print mydata

(注意,我改变了你的变量,因为“名单”是一个Python关键字)。


0
投票

你可以像下面这样做:

with open('data.txt') as f:
    lines = [line.strip() for line in f.readlines()]
    lines_to_lists = [line.split() for line in lines if line]
    content = list(zip(*lines_to_lists))

这样,从文件中的每一列变为在content列表中的特定地点(指数)。所以,如果你要打印的VLAN刚刚类型:

print(content[0])

如果你要打印的VLAN名称:

print(content[1])

对彼此而言:

for vlan, name in zip(content[0], content[1]):
    print(vlan, name)

-1
投票
with open('newfile', 'r') as newfile:
    list = newfile.readlines()
    for row in list:
        x = (row.strip().split())
        y = x[0:2]
        print(', '.join(y))
© www.soinside.com 2019 - 2024. All rights reserved.