写出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列,第二类是CAT开头的几列,第三类是DOG开头的几列,第四类是Fish开头的几列 7.把4类标题画成4个曲线图,标注每条线的标题
时间: 2024-03-05 10:55:19 浏览: 128
以下是实现上述功能的Python代码:
```python
import argparse
import pandas as pd
import re
import matplotlib.pyplot as plt
# 创建命令行参数解析器
parser = argparse.ArgumentParser(description='Process log file and generate charts')
parser.add_argument('log_file', help='path to the log file')
args = parser.parse_args()
# 读取log文件
with open(args.log_file) as f:
lines = f.readlines()
# 找到"My name is kitty"所在的行,并从下一行开始读取
start_line = None
for i, line in enumerate(lines):
if "My name is kitty" in line:
start_line = i+1
break
if start_line is None:
print("Error: 'My name is kitty' not found in log file.")
exit()
# 从start_line开始读取,删除重复行,然后写入新文件output.csv
lines = lines[start_line:]
lines = list(set(lines))
with open("output.csv", "w") as f:
for line in lines:
f.write(line)
# 读取output.csv文件,按照正则规则1和规则2分列
df = pd.read_csv("output.csv", header=None)
df1 = df[0].str.extract(r'(\d+)\s+(\w+)')
df2 = df[1:].apply(lambda x: pd.Series(re.split('\s+', x[0])), axis=1)
# 将分列后的数据写入output.csv文件
df1.to_csv("output.csv", mode="a", header=False, index=False)
df2.to_csv("output.csv", mode="a", header=False, index=False)
# 读取output.csv文件,将标题行分成4类
df = pd.read_csv("output.csv", header=None)
df.columns = df.iloc[0]
df = df.drop(0)
df1 = df.loc[:, ["ABC", "DFG"]]
df2 = df.loc[:, df.columns.str.startswith("CAT")]
df3 = df.loc[:, df.columns.str.startswith("DOG")]
df4 = df.loc[:, df.columns.str.startswith("Fish")]
# 画4个曲线图,标注每条线的标题
plt.plot(df1["ABC"], label="ABC")
plt.plot(df1["DFG"], label="DFG")
plt.legend()
plt.show()
for col in df2.columns:
plt.plot(df2[col], label=col)
plt.legend()
plt.show()
for col in df3.columns:
plt.plot(df3[col], label=col)
plt.legend()
plt.show()
for col in df4.columns:
plt.plot(df4[col], label=col)
plt.legend()
plt.show()
```
使用方法:在命令行中输入`python script.py /path/to/log/file`,其中`script.py`为保存上述代码的文件名,`/path/to/log/file`为log文件的路径。
阅读全文