如何用Python将日志转换为CSV文件?

933 阅读3分钟

一个不那么可笑的问题:比如说,你创建了一个网络应用,在云端的专用Linux服务器上运行。成千上万的用户访问你的网络应用,突然......它崩溃了。你的用户开始抱怨,你也失去了收入。更重要的是,你的信誉每小时都在流失。你的服务器坏了,那么你该怎么办? 🤯

首先,不要惊慌。🛸

让我们分析一下你的服务器日志!

这篇文章告诉你如何在Python中把你的日志文件转换成CSV文件,你可以用它来进一步处理(例如,在Pandas或Excel中)。

例子中的问题表述

给定一个文件my_file.log ,就像我从一个真实的IBM服务器日志例子中提取的那样。

03/22   08:51:01   INFO   :.main: *************** RSVP Agent started ***************
03/22   08:51:01   INFO   :...locate_configFile: Specified configuration file: /u/user10/rsvpd1.conf
03/22   08:51:01   INFO   :.main: Using log level 511
03/22   08:51:01   INFO   :..settcpimage: Get TCP images rc - EDC8112I Operation not supported on socket.
03/22   08:51:01   INFO   :..settcpimage: Associate with TCP/IP image name = TCPCS

如何将这个日志文件转换为以下标准逗号分隔值格式的CSV文件。

03/22,08:51:01,INFO,:.main: *************** RSVP Agent started ***************
03/22,08:51:01,INFO,:...locate_configFile: Specified configuration file: /u/user10/rsvpd1.conf
03/22,08:51:01,INFO,:.main: Using log level 511
03/22,08:51:01,INFO,:..settcpimage: Get TCP images rc - EDC8112I Operation not supported on socket.
03/22,08:51:01,INFO,:..settcpimage: Associate with TCP/IP image name = TCPCS

或者,如果你用Excel打开它,会是这个样子。

更漂亮,不是吗?与第一种表示方法(日志文件)不同,这种CSV表示方法对(大多数)人来说更容易阅读。🤖

用Pandas将服务器日志转换为CSV

你可以在Python中通过四个简单的步骤将.log 文件转换为CSV文件。**(1)安装Pandas 库,(2) 导入Pandas库,(3)将日志文件作为DataFrame读取,(4) 将DataFrame写到**CSV文件中。

  1. (可在shell中选择)pip install pandas
  2. import pandas as pd
  3. df = pd.read_csv('my_file.log', sep='\s\s+', engine='python')
  4. df.to_csv('my_file.csv', index=None)

下面是一个最小的例子。

import pandas as pd
df = pd.read_csv('my_file.log', sep='\s\s+', engine='python')
df.to_csv('my_file.csv', index=None)

ℹ 注意正则表达式 sep='\s\s+' ,在两个CSV值之间指定一个以上的单空格作为分隔符。如果你有一个不同的分隔符字符串,你可以在这里定义它。

你指定engine='python' 来告诉 Pandas 我们希望 Python 正则表达式引擎处理分隔符正则表达式。

代码的结果是下面的 CSV 文件。

你可以用这个CSV文件作为输入,比如说,用Excel表或谷歌电子表格进行进一步处理和分析。

这就是你的日志文件转换为CSV文件并导入Excel的样子。

这是你的日志文件作为Pandas DataFrame的样子。

   03/22  ... :.main: *************** RSVP Agent started ***************
0  03/22  ...  :...locate_configFile: Specified configuration...        
1  03/22  ...                        :.main: Using log level 511        
2  03/22  ...  :..settcpimage: Get TCP images rc - EDC8112I O...        
3  03/22  ...  :..settcpimage: Associate with TCP/IP image na...        

[4 rows x 4 columns]