用Python解析日志文件
我有一个日志文件,里面的每一行看起来像这样:
"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)