gpt4 book ai didi

python - 删除两个单词之间的所有字符并替换为空格

转载 作者:太空宇宙 更新时间:2023-11-04 01:35:09 24 4
gpt4 key购买 nike

我正在使用 Python 3。我编写了两个程序。循环通过 csv 文件获取 Cisco 交换机的 IP 地址,登录,运行命令,并将每个结果输出到单独的文本文件。所以我最终得到了一些文本文件……每个开关一个。第二个程序使用 xlwt 将每个文本文件中的信息写入其在 Excel 中的工作表。

我的主要想法是我需要开发一份报告,显示服务中的端口和停止服务的端口。一旦我将这些导入到 Excel 中,我就可以编写一些公式来提取我需要的数据。但就目前情况而言,当我将其导入 Excel 时,我必须手动删除一些单元格,因为所有内容都没有对齐,这是因为名称列中某些单词之间的空格(我正在导入 Excel作为空格分隔)。我试图用字符串和列表方法(拆分、连接、切片等)做一些事情,但我无法得到我想要的。并且 Name 列在任何一种一致的约定中都没有标准化。我确实注意到,尽管名称实际上可能很长,但它会被截断为一定数量的字符。

理想情况下,首先删除前 4 行(最顶部有空行)和最后一行,然后对于端口和状态之间的任何内容,将其全部删除(完全删除包括标题的列)。

这是从交换机获取数据后文件的样子。

sw1#term length 0sw1#show interfaces statusPort      Name               Status       Vlan       Duplex  Speed TypeGi0/1     Trunk to switch (a connected    1          a-full  a-100 10/100/1000BaseTXGi0/2     Network augment pe connected    1          a-full a-1000 10/100/1000BaseTXGi0/3                        connected    1          a-full a-1000 10/100/1000BaseTXGi0/4                        connected    1          a-full  a-100 10/100/1000BaseTXGi0/5                        notconnect   1            auto   auto Not PresentGi0/6                        notconnect   1            auto   auto Not PresentGi0/7                        notconnect   1            auto   auto Not PresentGi0/8                        notconnect   1            auto   auto Not PresentGi0/9                        notconnect   1            auto   auto Not PresentGi0/10                       connected    1          a-full  a-100 10/100/1000BaseTXGi0/11                       notconnect   1            auto   auto Not PresentGi0/12                       connected    1          a-full  a-100 10/100/1000BaseTXGi0/13                       disabled     1            auto   auto Not PresentGi0/14                       disabled     1            auto   auto Not PresentGi0/15                       disabled     1            auto   auto Not PresentGi0/16                       disabled     1            auto   auto Not Presentsw1#logout

我想要的最终结果如下。这应该允许行/列结构在导入 Excel 时保持完整。请注意,所有列信息均以空格分隔。我发现导入为固定宽度或由空格分隔并将连续空格视为一个检查似乎工作得很好。

Port      Status       Vlan       Duplex  Speed TypeGi0/1     connected    1          a-full  a-100 10/100/1000BaseTXGi0/2     connected    1          a-full a-1000 10/100/1000BaseTXGi0/3     connected    1          a-full a-1000 10/100/1000BaseTXGi0/4     connected    1          a-full  a-100 10/100/1000BaseTXGi0/5     notconnect   1            auto   auto Not PresentGi0/6     notconnect   1            auto   auto Not PresentGi0/7     notconnect   1            auto   auto Not PresentGi0/8     notconnect   1            auto   auto Not PresentGi0/9     notconnect   1            auto   auto Not PresentGi0/10    connected    1          a-full  a-100 10/100/1000BaseTXGi0/11    notconnect   1            auto   auto Not PresentGi0/12    connected    1          a-full  a-100 10/100/1000BaseTXGi0/13    disabled     1            auto   auto Not PresentGi0/14    disabled     1            auto   auto Not PresentGi0/15    disabled     1            auto   auto Not PresentGi0/16    disabled     1            auto   auto Not Present

任何指针将不胜感激。我在想正则表达式可能是有序的,但我需要一些关于如何构建它的帮助。我希望这不会太含糊。

删除了先前的更新并将其移至新线程

最佳答案

with open('file') as f:
lines = f.readlines()
lines = lines[-1:] + lines[2:-1]
for line in lines:
print line[0:11] + line[35:-1]

我认为这将大致满足您的需求;你可能需要稍微玩玩这些数字,因为我自己没有运行过它。它只使用列表(或字符串)索引:

  • list[x:] 是从 x 开始的所有条目
  • list[x:y] 是从 x 到 y 的所有条目
  • list[-x] 是倒数第 x 行

lines[-1:] + lines[2:-1] 将最后一行放在第一位,并丢弃前两行; line[0:11] + line[35:-1] 排除你不想要的部分和最后的换行符。

更新如果你想写入一个新文件,而不是标准输出:

with open('infile') as in:
with open('outfile', 'w') as out:
lines = in.readlines()
...
print(line[0:6] + line[28:-1], file=out)

事实上,由于 readlines 一次读取所有内容,您可以这样做:

with open('infile') as in:
lines = in.readlines()
with open('outfile', 'w') as out:
for line in lines:
....
print(line[0:6] + line[28:-1], file=out)

因为不需要打开输入文件(它在 with 完成时关闭)。

关于python - 删除两个单词之间的所有字符并替换为空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10567386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com