如何实现Python程序从命令行接收文件名并导入文件?
处理命令行参数的两种实用方法
嗨,这个需求在Python脚本开发里超常见,我给你分享两种靠谱的实现方式,你可以根据自己的场景选:
方法一:用sys.argv快速搞定(适合小型脚本)
sys.argv是Python内置的命令行参数列表,第一个元素是脚本本身的文件名,后面跟着的就是你在命令行输入的所有参数。比如你运行python3 numbers.py a.txt b.txt c.txt,sys.argv就是['numbers.py', 'a.txt', 'b.txt', 'c.txt']。
直接上可复用的代码示例,你可以照着改:
import sys def main(): # 先检查参数数量是否正确,避免用户输入出错 if len(sys.argv) != 4: print("正确用法: python3 numbers.py <training-images.txt> <training-labels.txt> <validation-images.txt>", file=sys.stderr) sys.exit(1) # 从参数列表里提取三个文件名 train_images_path = sys.argv[1] train_labels_path = sys.argv[2] val_images_path = sys.argv[3] # 接下来就可以正常打开文件处理业务逻辑了 with open(train_images_path, 'r') as f: # 这里写你处理训练图像的代码,比如读取内容 train_image_content = f.read() # ...你的其他处理逻辑 with open(train_labels_path, 'r') as f: # 处理训练标签的逻辑 pass with open(val_images_path, 'r') as f: # 处理验证图像的逻辑 pass # 重点:程序结果要通过print输出到标准输出(stdout),这样用户才能用>重定向到result.txt print("这里是你的程序输出内容") if __name__ == "__main__": main()
这个方法的优势是简单直接,不需要额外依赖,完全满足小型程序的需求。
方法二:用argparse更规范(适合需要扩展性的场景)
如果你的程序以后可能要加更多参数,或者想让用户能通过-h查看帮助信息,那argparse模块会更合适——它是Python标准库专门用来处理命令行参数的工具,能自动生成友好的帮助提示。
代码示例如下:
import argparse def main(): # 创建参数解析器,可添加程序描述 parser = argparse.ArgumentParser(description='处理训练/验证图像与标签的小程序') # 添加三个位置参数,每个参数都可以加帮助说明 parser.add_argument('train_images', help='训练图像文件的路径') parser.add_argument('train_labels', help='训练标签文件的路径') parser.add_argument('val_images', help='验证图像文件的路径') # 解析命令行传入的参数 args = parser.parse_args() # 使用解析后的参数,直接通过args.参数名获取 with open(args.train_images, 'r') as f: # 处理训练图像的逻辑 pass with open(args.train_labels, 'r') as f: # 处理训练标签的逻辑 pass with open(args.val_images, 'r') as f: # 处理验证图像的逻辑 pass # 同样,结果输出到stdout即可 print("程序输出内容") if __name__ == "__main__": main()
用户运行python3 numbers.py -h时,会自动显示如下帮助信息,非常友好:
usage: numbers.py [-h] train_images train_labels val_images 处理训练/验证图像与标签的小程序 positional arguments: train_images 训练图像文件的路径 train_labels 训练标签文件的路径 val_images 验证图像文件的路径 optional arguments: -h, --help show this help message and exit
关键注意事项
不管用哪种方法,绝对不要在代码里写死输出文件result.txt——因为用户是通过命令行的> result.txt来重定向输出的,你只需要把程序结果用print()输出到标准输出(stdout),系统就会自动把这些内容写入到result.txt里。
内容的提问来源于stack exchange,提问作者mm6643
相关产品推荐
相关产品推荐

