作为argparse参数的目录路径

时间:2016-08-08 16:36:09

标签: python argparse

问题:我想在ArgumentParser()的add.argument中写一个目录的路径作为用户的输入。

到目前为止:我已经写了这个

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('path', option = os.chdir(input("paste here path to biog.txt file:")), help= 'paste path to biog.txt file')

任何想法,这个问题的理想解决方案是什么?

3 个答案:

答案 0 :(得分:4)

一个人可以确保路径是一个有效目录,其中包含以下内容:

import argparse, os

def dir_path(string):
    if os.path.isdir(string):
        return string
    else:
        raise NotADirectoryError(string)

parser = argparse.ArgumentParser()
parser.add_argument('--path', type=dir_path)

# ...

可以使用os.path.isfile()来检查文件,也可以使用os.path.exists()来检查两个文件中的任何一个。

答案 1 :(得分:3)

您可以使用以下内容:

import argparse, os

parser = argparse.ArgumentParser()
parser.add_argument('--path', help= 'paste path to biog.txt file')
args = parser.parse_args()


os.chdir(args.path) # to change directory to argument passed for '--path'

print os.getcwd()

在运行脚本时将目录路径作为参数传递给--path。另外,请查看官方文档,了解argparsehttps://docs.python.org/2/howto/argparse.html

的正确用法

答案 2 :(得分:2)

参数解析器(argparse)示例:添加了自定义处理程序的不同类型的参数。对于 PATH ,您可以传递“-path” ,后跟路径值作为参数

import os
import argparse
from datetime import datetime


def parse_arguments():
    parser = argparse.ArgumentParser(description='Process command line arguments.')
    parser.add_argument('-path', type=dir_path)
    parser.add_argument('-e', '--yearly', nargs = '*', help='yearly date', type=date_year)
    parser.add_argument('-a', '--monthly', nargs = '*',help='monthly date', type=date_month)

    return parser.parse_args()


def dir_path(path):
    if os.path.isdir(path):
        return path
    else:
        raise argparse.ArgumentTypeError(f"readable_dir:{path} is not a valid path")


def date_year(date):
    if not date:
        return

    try:
        return datetime.strptime(date, '%Y')
    except ValueError:
        raise argparse.ArgumentTypeError(f"Given Date({date}) not valid")


def date_month(date):
    if not date:
        return

    try:
        return datetime.strptime(date, '%Y/%m')
    except ValueError:
        raise argparse.ArgumentTypeError(f"Given Date({date}) not valid")


def main():
    parsed_args = parse_arguments()

if __name__ == "__main__":
main()