代码之家  ›  专栏  ›  技术社区  ›  Karn Kumar

读取文件并分析数据

  •  2
  • Karn Kumar  · 技术社区  · 6 年前

    我正在读取一个文件,只打印行中有“load”的行,这是有效的,但我希望数据更加清晰或清晰,因为输出数据是 [soi-aahh] out: 16:45:50 up 436 days, 2:06, 5 users, load average: 0.08, 0.02, 0.00 其中主机名括在后面的括号中 out 我要删除并希望数据以两列格式显示,或者至少删除它们:

    $ cat logs.py
    #!/python/v3.6.1/bin/python3
    with open("file_1") as f:
        data = f.read()
        for line in data.splitlines():
            if "load" in line:
                print(line)
                print("")
    

    文件内容

    $ cat file_1
    [soi-aahh] sudo: uptime
    [soi-aahh] out: sudo password:
    [soi-aahh] out:  16:45:50 up 436 days,  2:06,  5 users,  load average: 0.08, 0.02, 0.00
    [soi-aahh] out:
    
    [soi-aabk] sudo: uptime
    [soi-aabk] out: sudo password:
    [soi-aabk] out:  16:45:50 up 586 days, 23:08,  7 users,  load average: 1.01, 1.03, 1.00
    [soi-aabk] out:
    
    [soi-abrrj] sudo: uptime
    [soi-abrrj] out: sudo password:
    [soi-abrrj] out:  16:45:50 up 219 days,  6:31,  4 users,  load average: 0.00, 0.00, 0.00
    [soi-abrrj] out:
    
    [soi-ritsh] sudo: uptime
    [soi-ritsh] out: sudo password:
    [soi-ritsh] out:  16:45:50 up 586 days, 23:13, 15 users,  load average: 5.01, 5.02, 5.04
        [soi-ritsh] out:
    

    脚本输出:

    $ ./logs.py
    [soi-aahh] out:  16:45:50 up 436 days,  2:06,  5 users,  load average: 0.08, 0.02, 0.00
    
    [soi-aabk] out:  16:45:50 up 586 days, 23:08,  7 users,  load average: 1.01, 1.03, 1.00
    
    [soi-abrrj] out:  16:45:50 up 219 days,  6:31,  4 users,  load average: 0.00, 0.00, 0.00
    
    [soi-ritsh] out:  16:45:50 up 586 days, 23:13, 15 users,  load average: 5.01, 5.02, 5.04
    

    渴望的:

    Hostname        Uptime
    soi-aahh        16:45:50 up 436 days
    

    或至少低于:

    soi aahh号: 16:45:50 up 436 days, 2:06, 5 users, load average: 0.08, 0.02, 0.00

    请建议是否有更好的方法来读取文件并执行此操作。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Aida Omar RJEIBI    6 年前

    您可能需要修剪线条:

    with open("file_1") as f:
        data = f.read()
        print('Hostname \t Uptime')
        for line in data.splitlines():
            if "load" in line:
                print(line.replace('] out: ', '\t').strip('['))
                print("")