用熊猫读取日志文件

dat*_*ana 5 python database logging dataframe pandas

我有一个日志文件,尝试使用read_csv或read_table在熊猫中读取。我有以下结果示例:

0    date=2015-09-17    time=21:05:35     duration=0    etc...
Run Code Online (Sandbox Code Playgroud)

在1列上。

我想拆分每一行,获取名称(如日期,时间等),然后将其转换为列,这样我将得到:

          date           time     duration   ...
  0    2015-09-17      21:05:35      0              
Run Code Online (Sandbox Code Playgroud)

谢谢 !

the*_*vis 2

-----编辑答案以解决间距不一致的问题:

不确定 pythonic 方法应该是什么,但这里有一个可行的方法。

以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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

-----第一个答案:

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

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

看:

  • `sep=r'\t'` 对我有用,而不是双重转义。这是有道理的,因为 r'' 充当反斜杠的转义符。 (2认同)