gpt4 book ai didi

python - 生成日志文件后如何将其写入CSV

转载 作者:太空宇宙 更新时间:2023-11-03 16:39:12 25 4
gpt4 key购买 nike

import random
import datetime

levels = ['CRITICAL','INFO','ERROR','WARNING','DEBUG']
module = ['web.py','setup.py','module.py','admin.py','views.py']
messages = ['email failed ','Info message','Warning message','Critical message']
dates = ['2016-04-01 11:34:24.278122','2016-04-03 1:34:24.168122','2016-04-11 12:34:24.278002','2016-04-17 08:04:24.978192','2016-04-23 04:44:43.472132']

def get_random_log_level():
x = levels[random.randint(0,len(levels)-1)]
return x

def get_random_message():
y = messages[random.randint(0,len(messages)-1)]
return y

def get_random_module():
z = module[random.randint(0,len(module))-1]
return z

def generate_log_line():
level = get_random_log_level()
date = dates[random.randint(0,len(dates))-1]
dt = str(date)
modulestr = get_random_module()
msg = get_random_message()
s = "{0} {1} {2} {3} \n".format(dt,level,modulestr,msg)
return s

def create_log_file(filename=None):
with open(filename,'w') as f:
for x in range(5000):
f.write(generate_log_line())
return

if __name__ == '__main__':
create_log_file('Test.txt')

以上代码使用以下格式生成日志文件:-

2016-04-03 1:34:24.168122 DEBUG web.py email failed  
2016-04-17 08:04:24.978192 WARNING module.py Critical message
2016-04-01 11:34:24.278122 DEBUG web.py email failed
2016-04-23 04:44:43.472132 DEBUG setup.py Info message
2016-04-23 04:44:43.472132 ERROR module.py email failed
2016-04-23 04:44:43.472132 CRITICAL views.py email failed <br>

现在我想读取日志文件并将一些数据(例如dt,level,msg)解析为csv文件下面是我的代码,但给出了错误:- 太多值需要解压,请帮忙?

import csv
import itertools
import generate_logs

def read_log_file_to_csv(filename=None):
with open('logs.csv','w') as csv:
csv.write("Date, Levels, Message")
with open(filename,'r') as f:
for line in f.readlines():
dt,level,msg = parse_log_file(line)
csv.write("{0} {1} {2}".format(dt,level,msg))

def parse_log_file(line):
dt,level,msg = line.split("\t")
return dt,level,msg

if __name__ == '__main__':
read_log_file_to_csv('Test.txt')

最佳答案

您正在日志行中写入 4 个元素:

s = "{0} {1} {2} {3} \n".format(dt,level,modulestr,msg)

您正在分割日志行并希望将其放入 3 个变量中:

dt,level,msg = line.split("\t")

这是行不通的:它需要 3 个变量(因为这是你给它写入的变量),但它得到 4 个变量。你可以这样做

dt,level,modulestr,msg = line.split("\t")

并且不要使用不需要的变量。

编辑:

如果您想在选项卡上拆分行,则必须确保它有一些选项卡。所以改变一下

s = "{0} {1} {2} {3} \n".format(dt,level,modulestr,msg)

s = "{0}\t{1}\t{2}\t{3}\n".format(dt,level,modulestr,msg)

关于python - 生成日志文件后如何将其写入CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36976493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com