如何通过命令行参数指定Python脚本读取的配置JSON文件
问题解答
一、命令行指定配置文件的方式完全可行,但需修正语法问题
你想通过-f参数指定数据集文件的思路没问题,但你写的字符串格式化语法有误,得调整写法。具体要做两步:
- 解析命令行参数:用Python标准库的
argparse处理-f参数,轻松获取用户指定的数据集文件名; - 正确拼接文件路径:别手动拼
\或/,用os.path.join()自动适配Windows和Linux的路径分隔符,还能直接删掉你原来的isWin()方法,代码更简洁。
二、open()调用需要绑定变量,但更推荐用with语句
json.load()需要接收文件对象作为参数,所以open()的结果必须赋值给变量(或者用with语句绑定)。不过更建议用with语句,它会自动帮你关闭文件,不用手动调用f.close(),就算代码中途抛出异常,文件也能正常关闭,比你原来的写法更安全。
修改后的完整代码示例
import os import json import argparse class ConfigReader: @staticmethod def getConfig(env, dataset_file): # 自动适配系统路径分隔符,拼接完整配置文件路径 config_filename = f"config_{env.lower()}_data_{dataset_file}.json" config_path = os.path.join(os.getcwd(), config_filename) # with语句自动管理文件生命周期 with open(config_path, 'r', encoding='utf-8') as f: return json.load(f) # 处理命令行参数逻辑 if __name__ == "__main__": parser = argparse.ArgumentParser(description='读取指定环境的数据集配置') parser.add_argument('-e', '--env', required=True, help='环境标识,比如dev、prod') parser.add_argument('-f', '--file', required=True, help='数据集文件标识,比如dataset1.config') args = parser.parse_args() # 调用方法获取配置 config_data = ConfigReader.getConfig(args.env, args.file) print(config_data)
关键说明
- 字符串格式化用
f-string(f"...")是Python 3.6+的标准写法,能正确把变量插入字符串,你原来的写法语法错误,现在这样才是正确的; os.path.join()会根据当前系统自动选择路径分隔符,彻底避免了判断系统的分支代码;with open(...)的写法是Python操作文件的最佳实践,不用操心文件关闭的问题。
内容的提问来源于stack exchange,提问作者commandlinecutie
相关产品推荐
相关产品推荐

