91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python?argparse命令參數與config配置參數怎么使用

發布時間:2023-03-01 09:51:29 來源:億速云 閱讀:125 作者:iii 欄目:開發技術

這篇文章主要介紹“Python argparse命令參數與config配置參數怎么使用”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Python argparse命令參數與config配置參數怎么使用”文章能幫助大家解決問題。

argparse 是什么

argparse 是 Python 內置的一個用于命令項選項與參數解析的模塊,通過在程序中定義好我們需要的參數,然后在程序啟動命令行傳遞我們想要改變的參數

使用argparse的最小使用例子

步驟:

(1)import argparse 首先導入模塊

(2)parser = argparse.ArgumentParser() 創建一個解析對象

(3)parser.add_argument() 向該對象中添加你要關注的命令行參數和選項。第三步中,可以添加多個我們想要的參數。如下面的例子

(4)parser.parse_args() 進行解析

(5)vars()將解析值轉換成字典對象,然后就可以使用了

例子如下,文件名為main.py

# 文件名為main.py
class DoSomething():
    def working(self):
        pass
if __name__ == '__main__':
    import argparse  # 步驟一:導入模塊
    # 啟動參數
    parser = argparse.ArgumentParser()  # 步驟二:創建一個解析對象
    # 步驟三:向解析對象中添加你要關注的命令行參數和選項
    parser.add_argument('--labels_dir', type=str,
        help='標簽目錄', default='./data/labels')   # help的值就是你對這個參數labels_dir的作用描述
    parser.add_argument('--models_dir', type=str,
        help='模型跟目錄', default='./data/models')  # type的值就是你對這個參數models_dir數據類型的指定
    parser.add_argument('--last_dir_name', type=str,
        help='文件后序名', default='_seq_month_serial')  # default的值就是你對這個參數last_dir_name設置的默認值
    parser.add_argument('--batch_size', type=int,
        help='批次大小', default=64)
    parser.add_argument('--classes', type=int,
        help='聚類數', default=9)
    parser.add_argument('--predict_date', type=str,
        help='預測年月', default='202101')
    parser.add_argument('--last_date', type=str,
        help='輸入最后年月', default='202001')
    parser.add_argument('--only_predict', action="store_true",  # action的值就是你對這個參數only_predict設置了布爾數據類型,并且默認值為True
        help='只識別,不訓練')
    parser.add_argument('--delete_model', action="store_true",
        help='先刪除模型,僅在訓練時使用')
    parser.add_argument('--hidden_size', type=int,
        help='模型維度', default=128)
    parser.add_argument('--learning_rate', type=float,
        help='學習速率', default=5e-4)
    parser.add_argument('--export_excel', action="store_true",
        help='導出excel')
    parser.add_argument('--loss_type', type=str,
        help='loss類型', default='categorical_crossentropy')
    parser.add_argument('--avg_model_num', type=int,
        help='平均模型數', default=10)
    parser.add_argument('--get_data', action="store_true",
        help='重新獲取數據')
    argparse_args = parser.parse_args()  # 步驟四:進行解析
	# vars() 函數返回對象object的屬性和屬性值的字典對象。
    args_default = vars(argparse_args)  # 步驟五,將解析值轉換成字典對象,然后就可以使用了
    print(type(argparse_args))  
    print(argparse_args)
    print('分割線')
    print(type(args_default))    # 是字典數據類型
    print(args_default)  # 將這個字典傳入到程序中,就可以拿到這些參數的所有值了

運行,得出下面的結果

<class 'argparse.Namespace'>
Namespace(labels_dir='./data/labels', models_dir='./data/models', last_dir_name='_seq_month_serial', batch_size=64, classes=9, predict_date='202101', last_date='202001', only_predict=False, delete_model=False, hidden_size=128, learning_rate=0.0005, export_excel=False, loss_type='categorical_crossentropy', avg_model_num=10, get_data=False)
分割線
<class 'dict'>
{'labels_dir': './data/labels', 'models_dir': './data/models', 'last_dir_name': '_seq_month_serial', 'batch_size': 64, 'classes': 9, 'predict_date': '202101', 'last_date': '202001', 'only_predict': False, 'delete_model': False, 'hidden_size': 128, 'learning_rate': 0.0005, 'export_excel': False, 'loss_type': 'categorical_crossentropy', 'avg_model_num': 10, 'get_data': False} 

argparse實際工作的用法

問題背景

上面的對法如果你程序就只是一個文件,那就已經滿足了。如果你項目比較大,有很多基礎的命令配置參數在很多啟動文件中都用到了,當然你可以在各自的啟動文件中都寫上,但是如果你這么做,后續參數值的修改和變動將非常麻煩,因為你需要同時修改很多啟動文件,有沒有辦法修改一個啟動文件就可以呢。辦法是有的。

解決辦法

通過新建一個類來實現,文件名為share_args.py。這個類里面寫上你所需要的命令參數

class ShareArgs():
	# args就是整個項目經常使用到的默認參數,經常不需要進行變動,所以就寫在這里。然后通過update的更新寫到啟動文件的字典參數里面
    args = {
        "labels_dir":"./shop_group/month_w_amt/data/labels", # 標簽目錄
        "labels_output_dir":"./shop_group/month_w_amt/data/labels_output", # 聚類導出標簽目錄
        "common_datas_dir":"./data", # 共用數據目錄
        "only_predict": False, # 只識別,不訓練
        "delete_model": True, # 先刪除模型,僅在訓練時使用
        "export_excel": False, # 導出excel
        "classes": 12, # 聚類數
        "batch_size": 16,
        "hidden_size": 32,
        "max_nrof_epochs": 100,
        "learning_rate": 0.0005,
        "loss_type": "categorical_crossentropy",
        "avg_model_num": 10,
        "steps_per_epoch": 4.0, # 4.0
        "lr_callback_patience": 4, 
        "lr_callback_cooldown": 1,
        "early_stopping_callback_patience": 6,
        "get_data": True,
    }
    def get_args():  # 獲取參數字典
        return ShareArgs.args
    def set_args(args):  # 一次性更新修改所有參數字典的值
        ShareArgs.args = args
    def set_args_value(key, value):  # 根據索引更新參數字典的值
        ShareArgs.args[key] = value
    def get_args_value(key, default_value=None):  # 獲取指定索引的默認參數的值
        return ShareArgs.args.get(key, default_value)
    def contain_key(key):  # 判斷索引是否在參數字典里面
        return key in ShareArgs.args.keys()
    def update(args):  # 用于更新字典中的鍵/值對,可以修改存在的鍵對應的值,也可以添加新的鍵/值對到字典中
        ShareArgs.args.update(args)

啟動文件如下,文件名為main.py

import sys
base_dir = ''
sys.path.append(base_dir)
from share_args import ShareArgs
class DoSomething():
    def working(self):
        print('ShareArgs.args : ',ShareArgs.args)
if __name__ == '__main__':
    import argparse  # 步驟一:導入模塊
    # 啟動參數
    parser = argparse.ArgumentParser()  # 步驟二:創建一個解析對象
    # 步驟三:向解析對象中添加你要關注的命令行參數和選項
    parser.add_argument('--labels_dir', type=str,
        help='標簽目錄', default='./data/labels')   # help的值就是你對這個參數labels_dir的作用描述
    parser.add_argument('--models_dir', type=str,
        help='模型跟目錄', default='./data/models')  # type的值就是你對這個參數models_dir數據類型的指定
    parser.add_argument('--last_dir_name', type=str,
        help='文件后序名', default='_seq_month_serial')  # default的值就是你對這個參數last_dir_name設置的默認值
    parser.add_argument('--batch_size', type=int,
        help='批次大小', default=64)
    parser.add_argument('--classes', type=int,
        help='聚類數', default=9)
    parser.add_argument('--predict_date', type=str,
        help='預測年月', default='202101')
    parser.add_argument('--last_date', type=str,
        help='輸入最后年月', default='202001')
    parser.add_argument('--only_predict', action="store_true",  # action的值就是你對這個參數only_predict設置了布爾數據類型,并且默認值為True
        help='只識別,不訓練')
    parser.add_argument('--delete_model', action="store_true",
        help='先刪除模型,僅在訓練時使用')
    parser.add_argument('--hidden_size', type=int,
        help='模型維度', default=128)
    parser.add_argument('--learning_rate', type=float,
        help='學習速率', default=5e-4)
    parser.add_argument('--export_excel', action="store_true",
        help='導出excel')
    parser.add_argument('--loss_type', type=str,
        help='loss類型', default='categorical_crossentropy')
    parser.add_argument('--avg_model_num', type=int,
        help='平均模型數', default=10)
    parser.add_argument('--get_data', action="store_true",
        help='重新獲取數據')
    argparse_args = parser.parse_args()  # 步驟四:進行解析
	# vars() 函數返回對象object的屬性和屬性值的字典對象。
    args_default = vars(argparse_args)  # 步驟五,將解析值轉換成字典對象,然后就可以使用了
    # print(type(argparse_args))  
    # print(argparse_args)
    # print('分割線')
    # print(type(args_default))    # 是字典數據類型
    # print(args_default)  # 將這個字典傳入到程序中,就可以拿到這些參數的所有值了
    ShareArgs.update(args_default)  # 將很多的默認參數更新到這里來
    DoSomething().working()

結果如下。可以發現,類中默認的參數全部拿到了

ShareArgs.args :  {'labels_dir': './data/labels', 'labels_output_dir': './yongjian/shop_group/month_w_amt/data/labels_output', 'common_datas_dir': './yongjian/data', 'only_predict': False, 'delete_model': False, 'export_excel': False, 'classes': 9, 'batch_size': 64, 'hidden_size': 128, 'max_nrof_epochs': 100, 'learning_rate': 0.0005, 'loss_type': 'categorical_crossentropy', 'avg_model_num': 10, 'steps_per_epoch': 4.0, 'lr_callback_patience': 4, 'lr_callback_cooldown': 1, 'early_stopping_callback_patience': 6, 'get_data': False, 'models_dir': './data/models', 'last_dir_name': '_seq_month_serial', 'predict_date': '202101', 'last_date': '202001'}

對argparse做不到的事情的補充

問題背景

在第二部分中已經解釋了如何配合多個啟動文件的問題,用一個類來解決。但是呢,還有個問題就是如果有很多配置參數變動比較頻繁,例如連接數據庫的賬號、密碼、端口、ip等等,這些數據變動多,而且數據需要一定的保密性,所以不能通過建一個類來進行傳遞,那該怎么辦呢?

解決辦法

通過讀取配置文件config.yml來進行解決。可以把正式環境的配置信息放到config.yml里面,測試環境的配置信息放到configtest.py。這樣可以確保整個項目讀取到的共用信息的一致的,修改起來也很方便

教學說明

下面的流程先解釋細節,然后再展現總體,請耐心看到最后

流程如下

config.yml的樣式如下,表示正式環境的信息。

common:
  server_ip: 10.23.167.20:9988
  mip_server_ip: test-mip.ur.com.cn:8768
  common_datas_dir: ./data
month_category_scale:
  # export_db_database: test_ims # 測試
  export_db_database: mimp # 正式
  # export_db_host: 192.168.130.13 # 測試
  export_db_host: 10.20.167.145 # 正式
  # export_db_password: 123456 # 測試
  export_db_password: 654321 # 正式
  export_db_port: 4000
  export_db_user: root
  export_dir: ./month_category_scale/data/export
  labels_dir: ./month_category_scale/data/labels
  log_dir: ./month_category_scale/logs
  log_level: DEBUG
  models_dir: ./month_category_scale/data/models
  ur_bi_dw_auth_mechanism: LDAP
  ur_bi_dw_database: ur_ai_dw
  ur_bi_dw_host: 10.23.167.20
  ur_bi_dw_password: 123456789
  ur_bi_dw_port: 21562
  ur_bi_dw_save_dir: ./month_category_scale/data/ur_bi_dw_data
  ur_bi_dw_user: urbiyetes

然后再建立一個文件,用于讀取配置文件,文件名為:config_helper.py

# !pip install PyYaml  # yaml文件的解析去B站看個10分鐘教學視頻即可學會,在這里不詳細解釋了
import yaml
def read_yml(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        return yaml.load(file, Loader=yaml.FullLoader)
def get_config(base_dir, logger=None):  # logger 表示日志對象
    if not os.path.exists(os.path.join(base_dir, './data/is_local.txt')):
        if logger:
            logger.info('加載正式環境配置:./config.yml')
        else:
            print('加載正式環境配置:./config.yml')
        config = read_yml(os.path.join(base_dir, './config.yml'))
    else:
        if logger:
            logger.info('加載測試環境配置:./config_dev.yml')
        else:
            print('加載測試環境配置:./config_dev.yml')
        config = read_yml(os.path.join(base_dir, './config_dev.yml'))
    return config

改變之后的main.py文件如下

import sys
base_dir = ''
sys.path.append(base_dir)
from share_args import ShareArgs
class DoSomething():
    def working(self, config=None):
        print('ShareArgs.args : ',ShareArgs.args)
		print('config', config)
if __name__ == '__main__':
    import argparse  # 步驟一:導入模塊
    # 啟動參數
    parser = argparse.ArgumentParser()  # 步驟二:創建一個解析對象
    # 步驟三:向解析對象中添加你要關注的命令行參數和選項
    parser.add_argument('--labels_dir', type=str,
        help='標簽目錄', default='./data/labels')   # help的值就是你對這個參數labels_dir的作用描述
    parser.add_argument('--models_dir', type=str,
        help='模型跟目錄', default='./data/models')  # type的值就是你對這個參數models_dir數據類型的指定
    parser.add_argument('--last_dir_name', type=str,
        help='文件后序名', default='_seq_month_serial')  # default的值就是你對這個參數last_dir_name設置的默認值
    parser.add_argument('--batch_size', type=int,
        help='批次大小', default=64)
    parser.add_argument('--classes', type=int,
        help='聚類數', default=9)
    parser.add_argument('--predict_date', type=str,
        help='預測年月', default='202101')
    parser.add_argument('--last_date', type=str,
        help='輸入最后年月', default='202001')
    parser.add_argument('--only_predict', action="store_true",  # action的值就是你對這個參數only_predict設置了布爾數據類型,并且默認值為True
        help='只識別,不訓練')
    parser.add_argument('--delete_model', action="store_true",
        help='先刪除模型,僅在訓練時使用')
    parser.add_argument('--hidden_size', type=int,
        help='模型維度', default=128)
    parser.add_argument('--learning_rate', type=float,
        help='學習速率', default=5e-4)
    parser.add_argument('--export_excel', action="store_true",
        help='導出excel')
    parser.add_argument('--loss_type', type=str,
        help='loss類型', default='categorical_crossentropy')
    parser.add_argument('--avg_model_num', type=int,
        help='平均模型數', default=10)
    parser.add_argument('--get_data', action="store_true",
        help='重新獲取數據')
    argparse_args = parser.parse_args()  # 步驟四:進行解析
	# vars() 函數返回對象object的屬性和屬性值的字典對象。
    args_default = vars(argparse_args)  # 步驟五,將解析值轉換成字典對象,然后就可以使用了
    # print(type(argparse_args))  
    # print(argparse_args)
    # print('分割線')
    # print(type(args_default))    # 是字典數據類型
    # print(args_default)  # 將這個字典傳入到程序中,就可以拿到這些參數的所有值了
    ShareArgs.update(args_default)  # 將很多的默認參數更新到這里來
    # DoSomething().working()
	import config_helper as config_helper
    config = config_helper.get_config(base_dir, None)
	DoSomething().working(config)

結果如下

加載正式環境配置:./config.yml
ShareArgs.args :  {'labels_dir': './data/labels', 'labels_output_dir': './shop_group/month_w_amt/data/labels_output', 'common_datas_dir': './data', 'only_predict': False, 'delete_model': False, 'export_excel': 
False, 'classes': 9, 'batch_size': 64, 'hidden_size': 128, 'max_nrof_epochs': 100, 'learning_rate': 0.0005, 'loss_type': 'categorical_crossentropy', 'avg_model_num': 10, 'steps_per_epoch': 4.0, 'lr_callback_patience': 4, 'lr_callback_cooldown': 1, 'early_stopping_callback_patience': 6, 'get_data': False, 'models_dir': './data/models', 'last_dir_name': '_seq_month_serial', 'predict_date': '202101', 'last_date': '202001'}
config :  {'common': {'server_ip': '10.23.167.20:9988', 'mip_server_ip': 'test-mip.ur.com.cn:8768', 'common_datas_dir': './data'}, 'month_category_scale': {'export_db_database': 'mimp', 'export_db_host': '10.20.167.145', 'export_db_password': 654321, 'export_db_port': 4000, 'export_db_user': 'root', 'export_dir': './month_category_scale/data/export', 'labels_dir': './month_category_scale/data/labels', 'log_dir': './month_category_scale/logs', 'log_level': 'DEBUG', 'models_dir': './month_category_scale/data/models', 'ur_bi_dw_auth_mechanism': 'LDAP', 'ur_bi_dw_database': 'ur_ai_dw', 'ur_bi_dw_host': '10.23.167.20', 'ur_bi_dw_password': 123456789, 'ur_bi_dw_port': 21562, 'ur_bi_dw_save_dir': './month_category_scale/data/ur_bi_dw_data', 'ur_bi_dw_user': 'urbiyetes'}}

關于“Python argparse命令參數與config配置參數怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

三原县| 缙云县| 鄂尔多斯市| 襄樊市| 乌苏市| 灵武市| 柳河县| 洛隆县| 东辽县| 岳阳县| 陇西县| 章丘市| 绵竹市| 大兴区| 环江| 乐陵市| 通许县| 会同县| 和田市| 镇原县| 新和县| 贵定县| 崇文区| 盈江县| 南乐县| 富阳市| 神池县| 日喀则市| 大足县| 韶山市| 文安县| 佛教| 吉安县| 布尔津县| 乐昌市| 井陉县| 涟水县| 廉江市| 工布江达县| 五大连池市| 尼勒克县|