【python脚本】作为一个强迫症,是不能忍没有对齐的表格的

本文介绍了一个使用Python编写的脚本,该脚本用于整理和对齐含有管道符分隔的数据行,使得日志文件内容整齐划一。脚本读取原始文件,分析每行的最大字段长度,并据此进行对齐,生成整洁的对齐后日志文件。通过运行示例展示了脚本的效果,使日志阅读更加舒适。
摘要由CSDN通过智能技术生成

前言

小朋宇,你有没有因为工具生成的log参差不齐而强迫症病发呢?不用担心,十一前我忍不了了之后呢,就决心把这个事情给他解决掉!

效果

首先是看下素材,原始文件是这样的,一个名为test的可怕文件:

================================
adddd | vvvvvvv | ddddddddssdsrsdfdslfkd99fi9 | 99oookmmmkjjj
1111111111| 23222222222 | ddddddddddddd | sssssssssssss
mnmnmnmnmnm | ccc | sssssssssddddddddddddddd | rrrrrrrrrrrrr
1|2|3|4



============8888888888888888888888888
qqqqqqqq|eeeeeeee|tttttttt|eeeeeeee
100 | 10000 | 1000000000 | 200000000000
ewe|dddddd|ssssss|1122223333
123 | 234 | 333
234|567| 555
345| 098|444

处理一下:

iPad:~/python_scr# ./align_log.py test

处理后的效果test.align.log:

================================
adddd       | vvvvvvv     | ddddddddssdsrsdfdslfkd99fi9 | 99oookmmmkjjj
1111111111  | 23222222222 | ddddddddddddd               | sssssssssssss
mnmnmnmnmnm | ccc         | sssssssssddddddddddddddd    | rrrrrrrrrrrrr
1           | 2           | 3                           | 4            



============8888888888888888888888888
qqqqqqqq | eeeeeeee | tttttttt   | eeeeeeee    
100      | 10000    | 1000000000 | 200000000000
ewe      | dddddd   | ssssss     | 1122223333  
123 | 234 | 333
234 | 567 | 555
345 | 098 | 444

就说六不六哈哈哈,对齐使我快乐!

代码

话不多说,直接把代码贴上吧,毕竟在ipad上操作起来很不方便,老样子还是一行注释都没有,下次一定改一定改:

#!/usr/bin/python3

import sys
import os
import re
import argparse

def gen_align_log(tmp_line):
    if len(tmp_line) == 0:
        return tmp_line

    hash    = []
    cnt     = 1
    out_line = []

    for line in tmp_line:
        i = 0
        line = line.strip()
        if len(hash) == 0:
            cnt = line.count("|") + 1
            for j in range(0, cnt):
                hash.append(0)
        for sub in line.split("|"):
            sub = sub.strip()
            hash[i] = max(len(sub), hash[i])
            i = i + 1
    for line in tmp_line:
        i = 0
        str = ""
        for sub in line.split("|"):
            sub  = sub.strip()
            str1 = "{:<%0d}" % hash[i]
            if i == cnt - 1:
                str = str + str1.format(sub)
                out_line.append(str)
            else:
                str = str + str1.format(sub) + " | "
            i = i + 1
    
    return out_line

def main():
    output_file = []
    tmp_line    = []

    input_file = sys.argv[1]
    with open (input_file, "r") as fl:
        handle = fl.readlines()
        pre_cnt = 0
        for line in handle:
            line = line.strip()
            if line.count("|") > 1:
                if len(tmp_line) == 0:
                    tmp_line.append(line)
                    pre_cnt = line.count("|")
                elif line.count("|") == pre_cnt:
                    tmp_line.append(line)
                else:
                    output_file.extend(gen_align_log(tmp_line))
                    tmp_line = []
                    tmp_line.append(line)
                    pre_cnt = line.count("|")

            else:
                output_file.extend(gen_align_log(tmp_line))
                tmp_line = []
                pre_cnt = 0
                output_file.append(line)

        if len(tmp_line) > 0:
            output_file.extend(gen_align_log(tmp_line))

    with open (input_file + ".align.log", "w") as fl:
        for line in output_file:
            fl.write(line + "\n")


if __name__ == '__main__':
    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尼德兰的喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值