用Python解析日志文件

3 投票
3 回答
3243 浏览
提问于 2025-04-16 22:49

我有一个日志文件,里面的每一行看起来像这样:

"1","2546857-23541","f_last","user","4:19 P.M.","11/02/2009","START","27","27","3","c2546857-23541",""

日志中的每一行都有12个用双引号括起来的部分,第7个部分是用户在聊天窗口输入的内容:

"22","2546857-23541","f_last","john","4:38 P.M.","11/02/2009","
What's up","245","47","1","c2546857-23541",""

这个字符串也显示了我遇到的问题;在聊天记录中,有些地方用户输入的文本在日志文件中是换行的,而不是像第一个例子那样在同一行。所以,简单来说,我想把第二个例子中的行改成第一个例子那样。

我试着在N++中使用查找/替换功能,能够找到每一行“孤立”的文本,但我没法把它们和上面那一行合并在一起。然后我想到了用Python写个程序来自动处理这个,但我有点卡住,不知道该怎么写代码。


在运行unutbu的代码时,Python在这一行出错了。

"1760","4746880-00129","bwhiteside","tom","11:47 A.M.","12/10/2009","I do not see ^"refresh your knowledge
^" on the screen","422","0","0","c4746871-00128",""

3 个回答

0

除非我理解错了这个问题。你只需要读取文件,然后去掉在双引号之间出现的换行符。

0

如果你的数据是有效的CSV格式,你可以使用Python的csv.reader类。这个方法应该能很好地处理你的示例数据。不过,它可能会因为源系统中嵌入的双引号的样子而出现问题。详细信息可以查看这个链接:http://docs.python.org/library/csv.html#module-contents

3

csv模块很聪明,它能识别出当一个被引号包围的内容没有结束时(这意味着它里面一定有换行符)。

import csv
with open('data.log',"r") as fin:
    with open('data2.log','w') as fout:        
        reader=csv.reader(fin,delimiter=',', quotechar='"', escapechar='^')
        writer=csv.writer(fout, delimiter=',', 
                          doublequote=False, quoting=csv.QUOTE_ALL)
        for row in reader:
            row[6]=row[6].replace('\n',' ')
            writer.writerow(row)

撰写回答