You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于前缀字符通过argparse实现文本与文件输入兼容?

用argparse实现前缀区分原始文本与文件名输入

当然可以实现,核心思路是给argparse的参数指定自定义类型处理函数,让它自动识别前缀并做对应处理。

具体实现代码

import argparse

def data_type(value):
    if value.startswith('@'):
        # 去掉@前缀,获取目标文件名
        filename = value[1:]
        try:
            with open(filename, 'r', encoding='utf-8') as f:
                return f.read().strip()  # 可根据需求去掉strip()保留文件原始格式
        except FileNotFoundError:
            raise argparse.ArgumentTypeError(f"文件 {filename} 不存在")
        except Exception as e:
            raise argparse.ArgumentTypeError(f"读取文件 {filename} 失败: {str(e)}")
    else:
        # 直接返回原始文本内容
        return value

def main():
    parser = argparse.ArgumentParser(description='区分原始文本与文件名输入的示例')
    parser.add_argument('-data', type=data_type, required=True, help='输入原始文本或@开头的文件名')
    args = parser.parse_args()
    
    # 此处可直接使用处理后的args.data,两种输入方式结果完全一致
    print("处理后的数据:", args.data)

if __name__ == '__main__':
    main()

测试示例

  1. 创建filename.txt文件,内容写入raw text
  2. 执行命令:
    python program.py -data @filename.txt
    
    输出:处理后的数据: raw text
  3. 执行命令:
    python program.py -data 'raw text'
    
    输出同样为:处理后的数据: raw text

额外说明

  • 自定义类型函数会被argparse自动调用,完成参数预处理
  • 可根据业务需求调整文件读取逻辑,比如保留换行符、指定非UTF-8编码等
  • 如果文件名包含空格或特殊字符,命令行中需给文件名加引号,例如@"my test file.txt"

内容的提问来源于stack exchange,提问作者phoxd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:45:34