【发布时间】:2023-03-13 19:07:02
【问题描述】:
我是 python 新手,目前正在玩 argpase。我正在尝试使用作为命令行参数给出的目录路径调用一个函数,后跟一个 argparse 选项(-name)和一个正则表达式,它遍历目录中的所有文件并将所有匹配项吐出到正则表达式中:
./find.py ../seek -name '[a-z]*\.txt'
但是,我收到了一个看起来像
的错误usage: find.py [-h] [--path PATH] [-name] [--regex REGEX]
find.py: error: unrecognized arguments: . . / s e e k / p r o g r a m . c
如果没有 -name,它只会打印路径内的所有文件。
这是我目前所拥有的:
#!/usr/bin/python2.7
import os, sys, argparse,re
from stat import *
def parse(argv=None):
parser = argparse.ArgumentParser()
parser.add_argument('--path', help='path of directory', action='store')
parser.add_argument('-name', '--name', action='store_true')
parser.add_argument('--regex', default=r"[a-z0-9A-Z]")
args = parser.parse_args(argv)
print(args)
return args
def main(argv=None):
direc = sys.argv[1]
files = []
for f in os.listdir(direc):
pathname = os.path.join(direc, f)
mode = os.stat(pathname).st_mode
if S_ISREG(mode):
args = parse(pathname)
if args.name:
dirls = [re.match(args.regex, pathname)]
print(dirls)
else:
print pathname
if __name__ == '__main__':main()
有什么想法吗?
【问题讨论】:
-
通常
parse_args使用sys.argv[1:]。在这里,您将其替换为pathname(通过argv)。pathname是一个字符串,parse_args将其转换为list,例如list(pathname)。这就是错误消息所抱怨的内容。 -
parse应该在f循环之外调用一次。 -
parse中的argv参数(复制自我之前的回答)允许我们提供字符串的测试列表。但如果是默认的None,则使用sys.argv[1:]。这个解析器期望一个目录被提供为'--path'。我们可以将其更改为不带“--path”标志的位置参数。
标签: python python-2.7 argparse