问题:我想在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')
任何想法,这个问题的理想解决方案是什么?
答案 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
。另外,请查看官方文档,了解argparse
:https://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()