用python把下面所有步骤写成代码,用re,argparse,pandas。可以实现通过命令把txt文件的指定内容另存为CSV,生成的CSV文件自动命名并保存到当前文件夹。 弹出几条指定标题的曲线图 1.读取txt文件 2.遍历文档,先找到关键字开头的行所在行数,然后保存从这一行到末尾的所有内容,删除重复内容的行,没有Header,另存为到到CSV。 3.将CSV中的文本内容,以空格为分隔符,进行分列 4.插入已经设置好的标题 5.根据标题和数据,生成曲线图。
时间: 2023-07-14 08:12:49 浏览: 103
以下是实现以上功能的代码:
```python
import re
import argparse
import pandas as pd
import matplotlib.pyplot as plt
# 定义命令行参数
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('input_file', type=str, help='input txt file')
parser.add_argument('output_file', type=str, help='output csv file')
parser.add_argument('keywords', type=str, nargs='+', help='keywords to search')
parser.add_argument('--plot_titles', type=str, nargs='+', help='plot titles')
args = parser.parse_args()
# 读取txt文件
with open(args.input_file, 'r') as f:
lines = f.readlines()
# 遍历文档,找到关键字开头的行所在行数
start_line = None
for i, line in enumerate(lines):
if any([re.search(keyword, line) for keyword in args.keywords]):
start_line = i
break
if start_line is None:
print('No matching lines found!')
else:
# 保存从这一行到末尾的所有内容
data = []
for line in lines[start_line:]:
if line not in data:
data.append(line)
# 删除重复内容的行,没有Header,另存为到CSV
df = pd.DataFrame(data, columns=['text'])
df.drop_duplicates(inplace=True)
df.to_csv(args.output_file, index=False)
# 将CSV中的文本内容,以空格为分隔符,进行分列
df = pd.read_csv(args.output_file, delimiter=' ', header=None)
# 插入已经设置好的标题
titles = ['time', 'value']
df.columns = titles
# 根据标题和数据,生成曲线图
if args.plot_titles:
for plot_title in args.plot_titles:
plt.plot(df['time'], df['value'])
plt.title(plot_title)
plt.show()
else:
plt.plot(df['time'], df['value'])
plt.show()
```
以上代码使用了 argparse 模块来处理命令行参数,使用了 re 和 pandas 模块来处理文本和 CSV 文件,使用了 matplotlib 模块来生成曲线图。在命令行中运行该脚本时,需要提供输入和输出文件名以及关键字参数。其中,关键字参数可以有多个,用空格隔开;如果需要生成多张曲线图,则可以使用 --plot_titles 参数来指定每张图的标题,多个标题也用空格隔开。生成的 CSV 文件会自动命名并保存到当前文件夹。
阅读全文