用 argparse 为 Python 脚本添加命令行参数
【摘要】 用 argparse 和 pathlib 构建文件统计命令,介绍必填参数、可选开关及输入校验。
脚本最初可能只处理一个固定目录。路径、输出文件和详细日志需要频繁调整时,把这些值写在命令行参数中,可以减少反复编辑代码的机会。Python 标准库的 argparse 可以完成参数解析,并自动生成帮助信息。
下面的示例统计目录中指定扩展名的文件数量。它使用 pathlib 遍历文件,不会修改目录内容。
import argparse
from pathlib import Path
def main() -> int:
parser = argparse.ArgumentParser(description="统计目录中特定类型的文件")
parser.add_argument("directory", type=Path, help="要扫描的目录")
parser.add_argument("--suffix", default=".py", help="文件后缀,默认为 .py")
parser.add_argument("--recursive", action="store_true", help="递归扫描子目录")
args = parser.parse_args()
if not args.directory.is_dir():
parser.error(f"目录不存在或不是目录: {args.directory}")
if not args.suffix.startswith("."):
parser.error("文件后缀必须以 . 开头,例如 .py")
entries = args.directory.rglob("*") if args.recursive else args.directory.iterdir()
count = sum(1 for path in entries if path.is_file() and path.suffix == args.suffix)
print(f"{args.suffix} 文件数量: {count}")
return 0
if __name__ == "__main__":
raise SystemExit(main())
将代码保存为 count_files.py 后,可以运行:
python count_files.py ./src
python count_files.py ./src --suffix .md --recursive
python count_files.py --help
第一个参数是必填的目录;--suffix 和 --recursive 是可选参数。type=Path 将输入转换为路径对象,action="store_true" 让开关在出现时取 True。parser.error 会输出错误原因和用法,并以非零状态退出,便于调用脚本的程序发现输入错误。
后缀比较区分大小写;如果需要把 .PY 和 .py 视为同一种类型,可以在比较前对两边调用 casefold()。目录中存在无法读取的路径时,遍历可能报错或受平台行为影响;需要可靠处理权限错误的工具应增加明确的异常处理和错误报告。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)