python3 glob.glob regex только получает первый матч

1

Имея немного странную проблему, так как этот код, как представляется, отлично работает на моих друзей Mac, но совсем не работает на моем ubuntu 16.04.

Через мой python я запускаю следующие

filenames = glob.glob(opts['-I'])

который пытается соответствовать набору из 32 текстовых файлов с форматом TEXT/text01.txt

Моим начальным регулярным выражением было следующее

python -I TEXT/text??

Который возвратил нулевые файлы.

Я также пробовал

python -I TEXT/text*

Кажется, что возвращает только text01.txt. Есть ли соответствующее регулярное выражение, которое может получить все текстовые файлы вместо первого, и есть ли причина, почему это работает на Mac, но не ubuntu?

Теги:
ubuntu-16.04
macos
command-line-arguments

1 ответ

0
Лучший ответ

проблема, когда вы звоните

python -I TEXT/text*

заключается в том, что TEXT/text* расширяется оболочкой. Итак, это точные аргументы, переданные python:

-I TEXT/text01.txt TEXT/text02.txt (and other matching files)

argparser назначает text01.txt -I а другие аргументы игнорируются (проверьте их, чтобы найти их). glob.glob возвращает точное имя файла, которое он получает (обратите внимание, что text?? не соответствует text01.txt потому что вам не хватает расширения или text??.txt it text??.txt)

Вам нужно процитировать ваш шаблон (не регулярное выражение)

python -I "TEXT/text*"

или избежать шаблона:

python -I TEXT/text\*

или использовать более доисторическую командную строку, такую как окна CMD, где символы символов передаются буквально.

  • 0
    Это решило проблему отлично, большое спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню