Чтобы ваша программа работала, вам нужен путь. Таким образом, опция --path
должна принимать аргумент. Измените вашу parse()
функцию, чтобы изменить строку
parser.add_argument('--path', help='path of directory', action='store')
до
parser.add_argument('--path', help='path of directory', action='store', required=True)
Вам нужно позвонить parse_args()
только один раз. Удалите вызов parse()
в верхней части цикла.
А тебе не нужно делать
direc = sys.argv[1]
если вы используете argparse
.
re.match()
возвращает match
объект , который, вероятно, не тот, который вы хотите напечатать.
Возможно, вы захотите взглянуть на match()
против search()
.
Функция match()
проверяет только совпадение RE в начале строки, в то время как search()
будет сканировать строку в поисках совпадения.
Если вы хотите напечатать имена файлов, соответствующие регулярному выражению, вы можете сделать
if S_ISREG(mode):
#args = parse(pathname)
if args.name:
#dirls = re.match(args.regex, pathname)
dirls = re.search(args.regex, pathname)
if( dirls ):
print(pathname)
else:
print pathname
Так что main()
должно быть что-то вроде
def main(argv=None):
args = parse(sys.argv[1:])
print(args)
#direc = sys.argv[1]
direc = args.path
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)
dirls = re.search(args.regex, pathname)
if( dirls ):
print(pathname)
else:
print pathname
Чтобы указать регулярное выражение, совпадающее с именами файлов, необходимо указать регулярное выражение, используя параметр --regex
. По умолчанию вы сделали так, чтобы соответствовать именам, имеющим только цифры и (английские) буквы.
./find.py --path ../seek -name --regex [a-z]\*.txt
или
./find.py --path ../seek -name --regex '[a-z]*.txt'