.logs 文件到 .csv 文件 pandas
.logs file to .csv file wih pandas
33 HEIGHT 5 5 INFO ABSENT FROM SCHOOL 123
He has been absent for 48 hours
NOLAN Time:2020-07-14 12:34:08 PAUL
所以我有一个类似于上面的日志文件。这是日志示例。他们都遵循这种格式。我能够将其分解为不同的领域。我在想是否有人可以在 pandas.
中提供帮助
这些是各种列和行:
计数|身高|MESSAGE_TITLE |BODY |SCHHO|日期时间 |姓名
33 | 5.5 |信息缺课 123|他是...|NOLAN|时间:2020-07-14 12:34:08|PAUL
我已经开始了,没有取得任何进展..
导入 pandas 作为 PD
将 NumPy 导入为 np
导入 glob
导入 os
导入 JSON
导入 wx
从日期时间导入日期时间
将 DateTime 导入为 dt
将时间导入为 t
将 matplotlib.pyplot 导入为 plt
导入 xlsxwriter
打开('STUDENT_PROFILE.log') 作为 f:
log = f.readlines()
print(log)
len(log)
n = len(log)
我在范围内(n):
log[i] = log[i].strip()
log[6].split(']')
log[6].split(']')[7]
log[6].split(']')[7].upper()
s = log[0].split(']')[0].strip('[')
dtfmt ='%Y-%m-%d %I:%M:%S' # %H -> 24 小时,%I-> 12 小时
dt2 = datetime.strptime(s,dtfmt)
日志中的行:
s1=line.split(']')[0].strip('[')
dt2 = dt.strptime(s1, dtfmt)
col1.append(dt2)
s= line.split(']')[1].strip().split(':')
col2.append(s[0])
if len(s) == 7:
col3.append(s[1])
col4.append(s[2])
col5.append(s[3])
col6.append(s[4])
col7.append(s[5])
col8.append(s[6])
else:
col8.append(np.nan)
df = pd.DataFrame([col1,col2,col3,col4,col5,col6,col7,col8])
df = df.T
df.columns=['COUNT','HEIGHT','MESSAGE_TITLE','BODY','SCHHOL','DATETIME','NAME']
df['delta_t'] =df.datetime - df.datetime[0]
df['delta_t_seconds'] = 0
我在范围内(df.shape[0]):
df.ix[i,'delta_t_seconds'] = df.delta_t.iloc[i].seconds
df.to_csv('test_log.csv', index=False)
任何想法...
在没有任何限制的情况下,这应该可行。请注意 5 5
的部分,您需要处理添加句点。正则表达式只是匹配一组模式;因此它的工作不是添加或删除字符。
此外,我注意到您正在逐行阅读并遍历它们。为了使此模式起作用,它假定一个多行字符串,因此您需要使用换行符连接数组。
这绝不是一个优雅的解决方案,也绝不是具有有限示例输入或约束的防弹解决方案。
模式
\s+(\d+)\s+HEIGHT\s+(\d\s\d{1,2})\s+([^\n\r]+)\W+([^\n]+)\W+([A-Z]+)\sTime:(\S+\s+\S+)\s+([A-Z]+)
查看演示 here。
33 HEIGHT 5 5 INFO ABSENT FROM SCHOOL 123
He has been absent for 48 hours
NOLAN Time:2020-07-14 12:34:08 PAUL
所以我有一个类似于上面的日志文件。这是日志示例。他们都遵循这种格式。我能够将其分解为不同的领域。我在想是否有人可以在 pandas.
中提供帮助这些是各种列和行:
计数|身高|MESSAGE_TITLE |BODY |SCHHO|日期时间 |姓名
33 | 5.5 |信息缺课 123|他是...|NOLAN|时间:2020-07-14 12:34:08|PAUL
我已经开始了,没有取得任何进展..
导入 pandas 作为 PD 将 NumPy 导入为 np 导入 glob 导入 os 导入 JSON 导入 wx 从日期时间导入日期时间 将 DateTime 导入为 dt 将时间导入为 t
将 matplotlib.pyplot 导入为 plt
导入 xlsxwriter
打开('STUDENT_PROFILE.log') 作为 f:
log = f.readlines()
print(log)
len(log)
n = len(log)
我在范围内(n):
log[i] = log[i].strip()
log[6].split(']')
log[6].split(']')[7]
log[6].split(']')[7].upper()
s = log[0].split(']')[0].strip('[')
dtfmt ='%Y-%m-%d %I:%M:%S' # %H -> 24 小时,%I-> 12 小时
dt2 = datetime.strptime(s,dtfmt)
日志中的行:
s1=line.split(']')[0].strip('[')
dt2 = dt.strptime(s1, dtfmt)
col1.append(dt2)
s= line.split(']')[1].strip().split(':')
col2.append(s[0])
if len(s) == 7:
col3.append(s[1])
col4.append(s[2])
col5.append(s[3])
col6.append(s[4])
col7.append(s[5])
col8.append(s[6])
else:
col8.append(np.nan)
df = pd.DataFrame([col1,col2,col3,col4,col5,col6,col7,col8])
df = df.T
df.columns=['COUNT','HEIGHT','MESSAGE_TITLE','BODY','SCHHOL','DATETIME','NAME']
df['delta_t'] =df.datetime - df.datetime[0]
df['delta_t_seconds'] = 0
我在范围内(df.shape[0]):
df.ix[i,'delta_t_seconds'] = df.delta_t.iloc[i].seconds
df.to_csv('test_log.csv', index=False)
任何想法...
在没有任何限制的情况下,这应该可行。请注意 5 5
的部分,您需要处理添加句点。正则表达式只是匹配一组模式;因此它的工作不是添加或删除字符。
此外,我注意到您正在逐行阅读并遍历它们。为了使此模式起作用,它假定一个多行字符串,因此您需要使用换行符连接数组。
这绝不是一个优雅的解决方案,也绝不是具有有限示例输入或约束的防弹解决方案。
模式
\s+(\d+)\s+HEIGHT\s+(\d\s\d{1,2})\s+([^\n\r]+)\W+([^\n]+)\W+([A-Z]+)\sTime:(\S+\s+\S+)\s+([A-Z]+)
查看演示 here。