用pandas读取日志文件

2024-04-26 03:34:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个日志文件,我试图用read_csv或read_table在pandas中读取。我有一个结果的例子:

0    date=2015-09-17    time=21:05:35     duration=0    etc...

在1列。

我想分割每一行,取名字(比如日期,时间,…)并将它们转换成列,这样我就可以得到:

          date           time     duration   ...
  0    2015-09-17      21:05:35      0              

谢谢你!


Tags: 文件csvpandasreaddatetime时间table
2条回答

我知道这是一个老帖子,但我遇到了同样的问题,找到了解决办法。错误Expected n fields in line n, saw n可能是由于每一行的列数不同造成的。如果每行的列顺序不同,则此方法也不好。我在这里编写了一个示例代码,将日志转换为json,然后转换为pandas数据帧。

import pandas as pd
import json

path='log_sample.log'

log_data=open(path,'r')
result={}
i=0
for line in log_data:
    columns = line.split('') #or w/e you're delimiter/separator is
    data={}
    for c in columns:
        key = c.split('=')[0]
        value=c.split('=')[1]
        data[key]=value
    result[i]=data
    i+=1
j=json.dumps(result)

df=pd.read_json(j, orient='index')

----编辑答案以解释间距不一致:

不知道什么是Python疗法,但这里有一个方法可以工作。

以OP的数据示例为例:

0    date=2015-09-17    time=21:05:35     duration=0
1    date=2015-09-17    time=21:05:36     duration=0
2    date=2015-09-17    time=21:05:37     duration=0
3    date=2015-09-17    time=21:05:38     duration=0
4    date=2015-09-17    time=21:05:39     duration=0
5    date=2015-09-17    time=21:05:40     duration=0

我循环遍历每一行并在等号处拆分,然后获取所需的文本:

import pandas as pd

log_data  = open('log_sample.txt', 'r')
split_list = []

for line in log_data:
    thing1 = line.split('=')
    #print(thing1)
    date = thing1[1][:10]
    time = thing1[2][:8]
    dur = thing1[3]

    split_list.append([date, time, dur])

df = pd.DataFrame(split_list, columns=['date', 'time', 'duration'])
df

——第一个答案:

正如@jezrael在评论中提到的,您可以在read_csv中利用“sep”参数。

pd.read_csv('test.txt', sep=r'\\t', engine='python') #[1]

见:

相关问题 更多 >