作为 argparse 参数的目录路径
Posted
技术标签:
【中文标题】作为 argparse 参数的目录路径【英文标题】:path to a directory as argparse argument 【发布时间】:2016-12-14 12:48:56 【问题描述】:我想在add_argument()
或ArgumentParser()
中接受目录路径作为用户输入。
到目前为止,我已经写了这个:
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')
这个问题的理想解决方案是什么?
【问题讨论】:
add_argument
不采用option
参数。这个路径名应该来自命令行吗?解析后改路径可以吗?
请注意,argparse 似乎有严重的限制:添加参数的方法不检查有效路径。对我来说似乎是核心功能,但它仍然非常有用。与此同时,您需要添加自己的逻辑来检查每条路径。有些人编写了一个额外的类来实现这一点:gist.github.com/brantfaircloth/1443543
另见***.com/questions/11415570/…。
directory path types with argparse的可能重复
【参考方案1】:
可以确保路径是一个有效的目录,例如:
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()
来检查两者中的任何一个。
【讨论】:
【参考方案2】:Argument Parser(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()
【讨论】:
【参考方案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
【讨论】:
以上是关于作为 argparse 参数的目录路径的主要内容,如果未能解决你的问题,请参考以下文章