Python argparse从本地文件加载命令行参数

问题

很多深度学习项目采用shell文件保存命令行参数,并通过shell脚本来运行项目中的模型训练、测试等工作,但是在学习他人项目的过程中,直接在shell命令行运行脚本,不利于debug和学习代码的细节,此时,我们更希望在IDE(如Pycharm)中能以Debug的方式运行,直接在IDE中运行shell脚本的py文件会出错,提示命令行参数的用法,所以就要想办法快速绕过这一步,能够直接实现在IDE中运行,很容易想到直接在py文件中指定参数,但是使用argparseadd_argument方法手工将所有参数在py文件中重新定义一遍,不仅代码量多而且容易出错也不便于配置的更改,有没有更高效便捷的方式呢?有。

解决方法

一个简单高效的方式是在第一次运行shell脚本时将命令行参数的解析结果保存在本地文件中,之后在IDE运行时,直接从本地文件加载参数即可,下面通过一段示例代码说明。

示例代码

from argparse import ArgumentParser
import json

parser = ArgumentParser()
parser.add_argument('--seed', type=int, default=8)
parser.add_argument('--resume', type=str, default='a/b/c.ckpt')
parser.add_argument('--surgery', type=str, default='190', choices=['190', '417'])
args = parser.parse_args()

with open('commandline_args.txt', 'w') as f:
    json.dump(args.__dict__, f, indent=2)

parser = ArgumentParser()
args = parser.parse_args()
with open('commandline_args.txt', 'r') as f:
    args.__dict__ = json.load(f)

print(args)

第一次运行shell脚本时将参数解析结果args保存在commandline_args.txt中,之后在IDE运行时,将命令行参数解析的代码注释掉,直接从commandline_args.txt中加载参数内容,并给args变量的__dict__属性赋值即可,如果要改动配置,直接改动commandline_args.txt文件中的内容即可,如下图:
在这里插入图片描述
好了,现在用上这个方法愉快地去学习代码吧。

参考资料

Saving python argparse file

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要使用Python实现命令行CLI和XML映射的机器学习,可以遵循以下步骤: 1. 安装必要的Python库,如argparse、xml.etree.ElementTree、scikit-learn等。 2. 构建CLI,定义需要的命令和参数,并使用argparse解析它们。 3. 根据参数加载训练数据和测试数据,并准备用于机器学习的数据。 4. 使用scikit-learn库中的机器学习算法构建模型,并对测试数据进行预测。 5. 保存模型和预测结果,并将它们映射到XML文件中,以便后续处理和使用。 下面是一个示例代码,演示了如何实现这些步骤: ```python import argparse import xml.etree.ElementTree as ET from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score import pickle # 定义CLI命令和参数 parser = argparse.ArgumentParser(description='Machine learning using CLI and XML mapping') parser.add_argument('--train_data', type=str, help='Path to the training data XML file') parser.add_argument('--test_data', type=str, help='Path to the testing data XML file') parser.add_argument('--model', type=str, help='Path to the model file') parser.add_argument('--prediction', type=str, help='Path to the prediction XML file') # 解析CLI参数 args = parser.parse_args() # 加载解析训练数据XML文件 tree = ET.parse(args.train_data) root = tree.getroot() # 解析训练数据并准备用于机器学习的数据 X = [] y = [] for record in root: x = [] for feature in record: x.append(float(feature.text)) X.append(x) y.append(int(record.get('label'))) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) # 训练模型 model = LogisticRegression() model.fit(X_train, y_train) # 保存模型 with open(args.model, 'wb') as f: pickle.dump(model, f) # 加载解析测试数据XML文件 tree = ET.parse(args.test_data) root = tree.getroot() # 解析测试数据并准备用于机器学习的数据 X_test = [] y_test = [] for record in root: x = [] for feature in record: x.append(float(feature.text)) X_test.append(x) y_test.append(int(record.get('label'))) # 对测试数据进行预测 y_pred = model.predict(X_test) # 保存预测结果 root = ET.Element('predictions') for i in range(len(y_pred)): record = ET.SubElement(root, 'record') record.set('id', str(i)) record.set('prediction', str(y_pred[i])) record.set('actual', str(y_test[i])) tree = ET.ElementTree(root) tree.write(args.prediction) # 打印准确率 print('Accuracy:', accuracy_score(y_test, y_pred)) ``` 使用这个代码,可以通过命令行指定训练数据XML文件、测试数据XML文件、模型文件和预测结果XML文件的路径,然后执行机器学习和预测,并将结果保存为XML文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值