首页 > 解决方案 > 读取文件并解析数据

问题描述

我正在读取一个文件并仅打印行中具有“加载”的行并且可以正常工作,但我希望数据更加不同或清晰,因为输出数据是[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

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

标签: python-3.5

解决方案


您可能需要修剪线条:

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("")

推荐阅读