Python3 把 JSON 日志转 CSV 文件脚本

1,823 阅读1分钟

MedusaSorcerer的博客


脚本源码

#!/usr/bin/env python
# _*_ Coding: UTF-8 _*_
import csv
import json


def main():
    keys, values = [], []
    for k, v in mapping.items():
        keys.append(k)
        values.append(v)
    with open(path, 'r', encoding='UTF-8') as f1:
        json_lines = f1.readlines()
        f1.close()

    data = []
    for i in json_lines:
        _data, _, i = [], None, json.loads(i)
        for va in values:
            try:
                exec(f"""_ = i{va};_data.append(_)""")
            except (Exception,):
                _data.append('')
        data.append(_data)

    with open(path + '.csv', 'w', encoding='utf-8', newline='') as f2:
        writer = csv.writer(f2)
        writer.writerow(keys)
        writer.writerows(data)
        f2.close()


if __name__ == '__main__':
    path = r'.\medusa.json'
    mapping = {
        '状态': '["status"]',
        'username': '["data"]["username"]'
    }

    main()

配置

  • path 是你的 .json 文件地路径, 运行成功后会以你的 json 文件命名 .csv 文件
  • mapping 是你需要关注字段的映射字典
    • key:映射的表头
    • value:每一行 json 数据的下标索引字符串

演示

json 文件内容:

{"status": 200, "data": {"username": "medusa 1"}}
{"status": 200, "data": {"username": "medusa 2"}}
{"status": 200, "data": {"username": "medusa 3"}}
{"status": 200, "data": {"username": "medusa 4"}}
{"status": 200, "data": {"username": "medusa 5"}}

脚本配置:

path = r'.\medusa.json'
mapping = {
    '状态': '["status"]',
    'username': '["data"]["username"]'
}

csv 展示: