写出python代码。用re,csv,argparse,pandas,matplotlib.需要实现把当前文件夹下的txt文件另存为csv,指定csv的几个标题可以生成曲线趋势图。 已知把当前文件夹下的txt文件另存为csv的脚本。现在需要生成曲线图。 其中,CSV文件有100个标题,3000行。第一列为行标题,第一行为列标题。每个标题为一张画布。
时间: 2023-06-27 12:07:36 浏览: 97
以下是实现该功能的Python代码:
```python
import re
import csv
import argparse
import pandas as pd
import matplotlib.pyplot as plt
# 定义命令行参数
parser = argparse.ArgumentParser(description='Convert txt files to csv and plot curves')
parser.add_argument('--input_folder', type=str, default='./', help='input folder path')
parser.add_argument('--output_folder', type=str, default='./', help='output folder path')
parser.add_argument('--csv_headers', type=str, nargs='+', default=[], help='csv header names')
args = parser.parse_args()
# 读取txt文件并保存为csv
for filename in os.listdir(args.input_folder):
if filename.endswith('.txt'):
with open(os.path.join(args.input_folder, filename), 'r') as f:
data = f.read()
csv_filename = os.path.join(args.output_folder, os.path.splitext(filename)[0] + '.csv')
with open(csv_filename, 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(['Row Title'] + args.csv_headers)
for row in re.findall(r'(\d+)\s+([\d\.]+)\s+([\d\.]+)\s+([\d\.]+)', data):
writer.writerow(row)
# 读取csv文件并绘制曲线图
for header in args.csv_headers:
csv_filename = os.path.join(args.output_folder, header + '.csv')
df = pd.read_csv(csv_filename)
plt.plot(df.iloc[:, 0], df.iloc[:, 1])
plt.xlabel('Row Title')
plt.ylabel(header)
plt.title(header)
plt.savefig(os.path.join(args.output_folder, header + '.png'))
plt.clf()
```
这个代码可以从命令行传入输入文件夹和输出文件夹的路径,以及要在CSV文件中使用的标题。它首先将所有TXT文件转换为CSV文件,并将它们保存到指定的输出文件夹中。然后,对于每个指定的标题,它会读取相应的CSV文件,并在以该标题命名的文件中绘制曲线图。每个曲线图都使用相应的标题作为X轴标签和Y轴标签,并保存为PNG文件。
阅读全文