Python - 读取文件和显示数据块

时间:2014-10-11 19:53:31

标签: python

我正在尝试阅读文件(下面的示例)。 我需要显示2组不同的数据

  1. 第一个数据不是连续的(即不连续 - 分布在文本文件中)
  2. 我需要显示的行应该有我在searchstrings中寻找的字符串

    def basic():
        searchstrings = ['Device name:', 'Switch type is', 'Kernel uptime is' , 'NXOS: version' ] 
        for line in fh:
            for word in searchstrings:
                if word in line:
                    print line
    

    我上面代码的问题是显示多行,如下所示:

      

    NXOS:版本5.2
       设备名称:N11k
      核心正常运行时间为55天,23小时,53分钟,11秒(s)    NXOS:版本5.2
       设备名称:N11k
      核心正常运行时间为55天,23小时,53分钟,12秒(秒)    交换机类型为:Nexus1100(8插槽)机箱

    我想我的for循环逻辑不正确 - 需要帮助修复它。 还可以将行保存在变量中,以便以后用于打印吗?

    1. 第二个数据串联(连续块) 我想阅读' show module'直到上面的行显示许可证' 我尝试过这里列出的建议 - python - Read file from and to specific lines of text 但无法使它工作 - 我根本没有输出
    2. 谢谢, 维克多

      正在阅读的文件:

        

      软件
         BIOS:版本06.20
         NXOS:版本5.2
         BIOS编译时间:11/07/2013
         NXOS映像文件是:bootflash:///n1000-dk9.5.2.bin
         NXOS编译时间:2014年6月3日13:00:00 [06/18/2014 23:35:53]

           

      硬件
         思科Nexus1000 C1508(8槽)机箱(" Supervisor模块")
         Intel(R)Xeon(R)CPU E5-2403具有16402460 kB的内存    处理器板ID SAL

           

      设备名称:N1k-LabSystem
         bootflash:21 kB
        内核正常运行时间为55天(s),23小时(s),53分钟(s),11秒(s)

           

      上次重置
         原因:未知
         系统版本:5.2
         服务:

           

      开关类型为:Nexus1100(8插槽)机箱

           

      show module
        Mod Ports模块类型模型状态

           
           

      2 52 48x1 / 10G SFP + 4x40G以太网模块N11K-X9564PX ok
        3 36 36p 40G以太网模块N11k-X9636PQ ok
        21 0结构模块N11k-FM ok
        22 0结构模块N11k-FM ok
        23 0结构模块N11k-FM ok
        24 0结构模块N11k-FM ok
        25 0结构模块N11k-FM ok
        26 0结构模块N11k-FM ok
        27 0监控模块N11k-SUP-A有效*
        29 0系统控制器N11k-SC-A有效
        30 0系统控制器N11k-SC-A备用

           

      Mod Sw Hw Slot

           
           

      2 5.2 1.0 LC2
        3 5.2 1.0 LC3
        21 5.2 1.1 FM1
        22 5.2 1.1 FM2

           

      '显示许可证'
        XYZABNCD

1 个答案:

答案 0 :(得分:0)

问题超出了您的basic功能。我试了一下,线条没有重复。它可能只来自你的称呼方式。如果你想让它们以后再打印,你应该写:

def basic(fh):     结果= []     searchstrings = ['设备名称:','切换类型为','内核正常运行时间为' ,' NXOS:版本' ]     对于fh中的行:         for searchstrings中的单词:             如果排成一行:                 resul.append(line.strip())                 打破     返回结果

那样:

  • 即使行包含多个搜索词,也只会使用一次
  • 您将fh作为参数传递而不是使用全局
  • 返回匹配行列表

要获得show moduleshow license之间的界限,您可以使用:

def between(fh, first, last)
    ok = False
    for line in fh:
        if last in line: break
        if ok: print line.rstrip()
        if first in line: ok=True

between('show module', 'show license')