我有一个脚本,它使用os.walk进入目录结构并通过扩展名匹配文件并将文件复制到另一个位置。
这就是我的文件副本:
sourceDir=sys.argv[-2].rstrip("/")
destDir=sys.argv[-1].rstrip("/")
//copy code
所以我只想打电话:
python mycode.py ~/a/ ~/b/
我想要做的是添加一个可选参数开关,它也将匹配搜索模式:
python mycode.py --match "pattern" ~/a/ ~/b/
在我的代码中,我会在以下情况下添加额外的内容:
if "--match" in sys.argvs:
#try reference the string right after --match"
for root, dir, files... etc
所以准确地说,如果 - “匹配”在sys.argvs中我怎么能找到“模式”? python的新手,所以任何帮助都会非常感激。
谢谢!
答案 0 :(得分:1)
您可以使用模块OptionParser。例如:
from optparse import OptionParser
usage = 'python test.py -m'
parse = OptionParser(usage)
parse.add_option('-m', '--match', dest='match', type='string'
default='', action='store',
help='balabala')
options, args = parse.parse_args()
更新:如果您使用的是python2.7,argparse会更好。用法与OptionParser类似。
答案 1 :(得分:0)
请不要尝试自己解析字符串。请改用argparse模块。
答案 2 :(得分:0)
argparse
库非常适用于可选参数解析:
import argparse
p = argparse.ArgumentParser(description="My great script")
p.add_argument("sourceDir", type=str, help="source directory")
p.add_argument("destDir", type=str, help="destination directory")
p.add_argument("--match", type=str, dest="match", help="search pattern")
args = p.parse_args()
print args.sourceDir, args.destDir, args.match
这样,args.match
如果没有提供,则为None
:
Davids-MacBook-Air:BarNone dgrtwo$ python mycode.py ~/a/ ~/b/
/Users/dgrtwo/a/ /Users/dgrtwo/b/ None
Davids-MacBook-Air:BarNone dgrtwo$ python mycode.py --match "pattern" ~/a/ ~/b/
/Users/dgrtwo/a/ /Users/dgrtwo/b/ pattern
它还可以判断是否存在正确数量的参数:
usage: mycode.py [-h] [--match MATCH] sourceDir destDir
mycode.py: error: too few arguments
并附上一条帮助信息:
Davids-MacBook-Air:BarNone dgrtwo$ python mycode.py -h
usage: mycode.py [-h] [--match MATCH] sourceDir destDir
My great script
positional arguments:
sourceDir source directory
destDir destination directory
optional arguments:
-h, --help show this help message and exit
--match MATCH search pattern