写出python代码,用argparse,pandas。能在任何文件夹读取Log。具体如下: 1.读取log,当读取到最后一次出现"My name is kitty"时,从下一行开始读 2.删除所有重复的行,只留第一行 3.第一行按照正则规则1分列后,写入新的CSV文件Output 4.从下一行开始按照正则规则2分列后,继续写入新的CSV文件Output 5.读取CSV文件Output 6.把标题行分为4类,第一类是标题为ABC,DFG的2列
时间: 2024-03-05 15:55:05 浏览: 105
python实现读取文件夹下所有excel文件内容上传MySQL数据库,并附带生成log文件,同时上传成功之后清空文件夹
好的,我已经了解了您的需求,下面是符合您要求的Python代码:
```python
import argparse
import pandas as pd
import re
# 定义命令行参数
parser = argparse.ArgumentParser(description='Process log file and output CSV file')
parser.add_argument('log_file', metavar='log_file', type=str, help='path of input log file')
parser.add_argument('output_file', metavar='output_file', type=str, help='path of output CSV file')
args = parser.parse_args()
# 读取log文件
log_data = []
with open(args.log_file, 'r') as f:
flag = False
for line in f:
if "My name is kitty" in line:
flag = True
continue
if flag:
log_data.append(line)
log_df = pd.DataFrame(log_data, columns=['log'])
# 删除重复行
log_df.drop_duplicates(inplace=True)
# 分列操作
pattern1 = r'(\d+)-(\d+)-(\d+)\s+(\d+):(\d+):(\d+)\s+(.*)'
log_df[['Date', 'Time', 'Message']] = log_df['log'].str.extract(pattern1)
log_df.drop(['log'], axis=1, inplace=True)
# 写入第一部分结果
log_df.to_csv(args.output_file, index=False)
# 继续分列操作
pattern2 = r'(\d+),\s+(.*)'
log_df[['Value1', 'Value2']] = log_df['Message'].str.extract(pattern2)
# 读取CSV文件
csv_df = pd.read_csv(args.output_file)
# 根据标题进行分类
category1 = ['ABC', 'DFG']
category1_df = csv_df[category1]
# 输出结果
print(category1_df.head())
```
这段代码使用了argparse和pandas两个库,可以方便地处理命令行参数和CSV文件的读写操作。具体实现步骤如下:
1. 使用argparse库定义了两个命令行参数,分别为输入log文件和输出CSV文件的路径。
2. 使用open函数读取log文件,并根据要求从"My name is kitty"的下一行开始读取内容,存储在一个DataFrame对象中。
3. 使用pandas库的`drop_duplicates`方法删除重复行。
4. 使用正则表达式对DataFrame对象中的内容进行分列操作,并删除不需要的列。
5. 将第一部分结果写入CSV文件中。
6. 对第一部分结果的Message列进行进一步分列操作。
7. 使用pandas库的`read_csv`方法读取CSV文件。
8. 根据标题进行分类,输出结果。
需要注意的是,为了保证正则表达式规则能够正确地分列,您需要根据实际情况来修改`pattern1`和`pattern2`变量的值。另外,为了能够正确地读取log文件,您需要保证log文件中包含"My name is kitty"这一行。
阅读全文