python使用技巧(二十四):彻底学会argparse与sys.argv方法
目录
- 1、sys.argv
- 2、argparse
- 3、结合两种使用更好
详细说明直接看代码,这里就不注水了。
1、sys.argv
import sys
a=sys.argv[0] # 当前py路径目录
print(a)
b=sys.argv[1] #从所以为1开始加入参数
print(b)
c = sys.argv[2:] #2后面的参数都是这个,多余两个自动生成list
#如果制定维度,则[2:4]
print(c)
if __name__ == '__main__':
pass
# python test_argv.py 2021 x y z m n
'''
test_argv.py
2021
['x', 'y', 'z', 'm', 'n']
'''
2、argparse
案例1:
#-*- coding: UTF-8 -*-
import argparse #步骤一
def parse_args():
"""
:return:进行参数的解析
"""
parser = argparse.ArgumentParser(description="you should add those parameter") # 这些参数都有默认值,当调用parser.print_help()或者运行程序时由于参数不正确(此时python解释器其实也是调用了pring_help()方法)时, # 会打印这些描述信息,一般只需要传递description参数,如上。
parser.add_argument('--addresses',default="sipingroad", help = "The path of address")
parser.add_argument('--gpu', default=0)# 步骤二,后面的help是我的描述
args = parser.parse_args() # 步骤三
return args
if __name__ == '__main__':
args = parse_args()
print(args.addresses) #直接这么获取即可。
"""
1、python test_arg.py -h #帮助
usage: test_arg.py [-h] [--addresses ADDRESSES] [--gpu GPU]
you should add those parameter
optional arguments:
-h, --help show this help message and exit
--addresses ADDRESSES
The path of address
--gpu GPU
2、python test_arg.py --addresses this-is-parameter-of-addresses #输入参数
this-is-parameter-of-addresses
"""
案例2:
import os
import sys
import argparse
def parse_arguments():
parser = argparse.ArgumentParser()
parser.add_argument('--dataset_train_dir', type=str, help='数据集训练数据路径', default='./dataset/MIR-1K/Wavfile')
# parser.add_argument('--dataset_validate_dir', type=str, help='数据集验证数据路径', default='./dataset/MIR-1K/UndividedWavfile')
# parser.add_argument('--model_dir', type=str, help='模型保存的文件夹', default='model')
# parser.add_argument('--model_filename', type=str, help='模型保存的文件名', default='svmrnn.ckpt')
# parser.add_argument('--dataset_sr', type=int, help='数据集音频文件的采样率', default=16000)
# parser.add_argument('--learning_rate', type=float, help='学习率', default=0.0001)
# parser.add_argument('--batch_size', type=int, help='小批量训练数据的长度', default=64)
# parser.add_argument('--sample_frames', type=int, help='每次训练获取多少帧数据', default=10)
# parser.add_argument('--iterations', type=int, help='训练迭代次数', default=30000)
# parser.add_argument('--dropout_rate', type=float, help='dropout率', default=0.95)
return parser.parse_args()
# # def main(args):
# #先看数据集数据是否存在
# if not os.path.exists(args.dataset_train_dir) or not os.path.exists(args.dataset_validate_dir):
# raise NameError('数据集路径"./dataset/MIR-1K/Wavfile"或"./dataset/MIR-1K/UndividedWavfile"不存在!')
if __name__ == '__main__':
args = parse_arguments()
print(args.dataset_train_dir)
# print(parse_arguments(sys.argv[1:]))
# python est1.py - -dataset_train_dir = / data / 2021
# 输出结果:/ data / 2021
3、结合两种使用更好
import os
import sys
import argparse
def parse_arguments(argv):
parser = argparse.ArgumentParser()
#如果路径不成功,可以直接输入绝对路径
parser.add_argument('--dataset_train_dir', type=str, help='数据集训练数据路径', default='./dataset/MIR-1K/Wavfile')
parser.add_argument('--dataset_validate_dir', type=str, help='数据集验证数据路径', default='./dataset/MIR-1K/UndividedWavfile')
# parser.add_argument('--model_dir', type=str, help='模型保存的文件夹', default='model')
parser.add_argument('--model_filename', type=str, help='模型保存的文件名', default='svmrnn.ckpt')
# parser.add_argument('--dataset_sr', type=int, help='数据集音频文件的采样率', default=16000)
# parser.add_argument('--learning_rate', type=float, help='学习率', default=0.0001)
# parser.add_argument('--batch_size', type=int, help='小批量训练数据的长度', default=64)
# parser.add_argument('--sample_frames', type=int, help='每次训练获取多少帧数据', default=10)
# parser.add_argument('--iterations', type=int, help='训练迭代次数', default=30000)
# parser.add_argument('--dropout_rate', type=float, help='dropout率', default=0.95)
return parser.parse_args(argv)
def main(args):
#先看数据集数据是否存在
if not os.path.exists(args.dataset_train_dir) or not os.path.exists(args.dataset_validate_dir):
print('1111111-----11111')
raise NameError('数据集路径"./dataset/MIR-1K/Wavfile"或"./dataset/MIR-1K/UndividedWavfile"不存在!')
print('22222-----22222')
else:
print("路径参数都正确啦!")
if __name__ == '__main__':
args2021 = parse_arguments(sys.argv[1:])
print(args2021)
# 案例1:
# 表示上面的参数dataset_train_dir后面可以从1开始
#终端输入参数:python test_arg_path.py --dataset_train_dir=/data/tensorflow
# 结果:Namespace(dataset_train_dir='/data/tensorflow')
# 案例2:
# 表示上面的参数dataset_train_dir后面可以从1开始
# python test_arg_path.py --model_filename==/tensorflow2/data
#结果:上次没输入的参数也会输出
# Namespace(dataset_train_dir='./dataset/MIR-1K/Wavfile', model_filename='=/tensorflow2/data')
# python test_arg_path.py - -model_filename == 696969696
# Namespace(dataset_train_dir='./dataset/MIR-1K/Wavfile', model_filename='=696969696')
main(parse_arguments(sys.argv[1:]))
#输出结果:
'''
python test_arg_path.py --model_filename=696969696 --dataset_train_dir=./dataset/MIR-1K/Wavfile
--dataset_validate_dir=./separation_of_voice_and_music/dataset/MIR-1K/UndividedWavfile
输出:
Namespace(dataset_train_dir='./dataset/MIR-1K/Wavfile',
dataset_validate_dir='./separation_of_voice_and_music/dataset/MIR-1K/UndividedWavfile',
model_filename='696969696')
路径参数都正确啦!
'''