argparse库add_argument有什么type,请全部列出
时间: 2024-03-07 11:54:15 浏览: 51
在argparse库中,`add_argument`函数的`type`参数指定了命令行参数的类型。以下是argparse库中支持的type类型列表:
- `int`: 将参数解析为整数
- `float`: 将参数解析为浮点数
- `complex`: 将参数解析为复数
- `str`: 将参数解析为字符串
- `bool`: 将参数解析为布尔值(True或False),支持`--option`和`--no-option`两种形式的命令行参数
- `list`: 将参数解析为列表,例如`--option 1 2 3`将被解析为列表`[1, 2, 3]`
- `tuple`: 将参数解析为元组,例如`--option 1 2 3`将被解析为元组`(1, 2, 3)`
- `file`: 将参数解析为文件对象,可以指定文件的打开模式,例如`argparse.FileType('r')`表示以只读模式打开文件
- 自定义类型:可以指定自定义类型,例如`argparse.FileType('r')`表示以只读模式打开文件
除此之外,还可以在`add_argument`函数中指定`type`参数的默认值,例如`add_argument('--option', type=int, default=0)`表示如果命令行中没有指定`--option`参数,则将其默认值设置为0。
相关问题
写出python代码。用re,csv,argparse,pandas,matplotlib.需要实现把当前文件夹下的txt文件另存为csv,指定csv的几个标题可以生成曲线趋势图。 已知把当前文件夹下的txt文件另存为csv的脚本。现在需要生成曲线图。 其中,CSV文件有100个标题,3000行。第一列为行标题,第一行为列标题。每个标题为一张画布。
以下是实现该功能的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文件。
写出python代码,用argparse。能在任何文件夹读取Log。具体如下: 1.读取log,当读取到最后一次出现"My name is kitty"时,从下一行开始读 2.删除所有重复的行,只留第一行 3.逐行写入csv 4.第1行按照正则规则1分列后,才知道有多少列,分列符号也不知道有几个空格。 5.从第2行开始按照正则规则2分列后,才知道有多少列,分列符号也不知道有几个空格。 6.读取CSV文件Output 7.把标题行分为4类,第一类是标题为ABC,DFG的2列,第二类是CAT开头的几列,第三类是DOG开头的几列,第四类是Fish开头的几列 8.把4类标题画成4个曲线图,标注每条线的标题
以下是能够实现上述功能的 Python 代码:
```python
import argparse
import csv
import re
import matplotlib.pyplot as plt
# 定义 argparse
parser = argparse.ArgumentParser(description='Process log file and output csv file')
parser.add_argument('log_file', metavar='log_file', type=str,
help='path to log file')
parser.add_argument('csv_file', metavar='csv_file', type=str,
help='path to csv file')
args = parser.parse_args()
# 读取 log 文件
with open(args.log_file) as f:
lines = f.readlines()
# 找到最后一次出现 "My name is kitty" 的行
last_kitty_idx = None
for i, line in enumerate(lines):
if "My name is kitty" in line:
last_kitty_idx = i
# 从下一行开始读取
lines = lines[last_kitty_idx+1:]
# 删除所有重复的行,只留第一行
unique_lines = []
for line in lines:
if line not in unique_lines:
unique_lines.append(line)
# 写入 csv 文件
with open(args.csv_file, mode='w') as f:
writer = csv.writer(f)
# 第 1 行按照正则规则 1 分列
headers = re.split(r'\s+', unique_lines[0].strip())
writer.writerow(headers)
# 从第 2 行开始按照正则规则 2 分列
for line in unique_lines[1:]:
row = re.split(r'\s+', line.strip())
writer.writerow(row)
# 读取 csv 文件
with open(args.csv_file, mode='r') as f:
reader = csv.reader(f)
rows = [row for row in reader]
# 把标题行分为 4 类
abc_dfg_cols = []
cat_cols = []
dog_cols = []
fish_cols = []
for i, header in enumerate(rows[0]):
if header in ["ABC", "DFG"]:
abc_dfg_cols.append(i)
elif header.startswith("CAT"):
cat_cols.append(i)
elif header.startswith("DOG"):
dog_cols.append(i)
elif header.startswith("Fish"):
fish_cols.append(i)
# 把 4 类标题画成 4 个曲线图,标注每条线的标题
plt.figure(figsize=(10, 6))
for cols, title in [(abc_dfg_cols, "ABC/DFG"), (cat_cols, "CAT"), (dog_cols, "DOG"), (fish_cols, "Fish")]:
x = [row[0] for row in rows[1:]]
for col_idx in cols:
y = [float(row[col_idx]) for row in rows[1:]]
plt.plot(x, y, label=rows[0][col_idx])
plt.title(title)
plt.xlabel("Time")
plt.ylabel("Value")
plt.legend()
plt.show()
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![none](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)