Обрабатывать пробелы во входе argparse

используя python и argparse, пользователь может ввести имя файла с-d в качестве флага.

parser.add_argument("-d", "--dmp", default=None)

однако это не удалось, когда путь включал пробелы. Е. Г.

-d C:SMTHNGName with spacesMOREfile.csv

Примечание: пробелы вызовут ошибку (флаг принимает только 'C:SMTHNGName' as input).

error: unrecognized arguments: with spacesMOREfile.csv

мне потребовалось больше времени, чем нужно, чтобы найти решение этой проблемы... (не нашел Q&A для него, поэтому я делаю свой собственный пост)

4 ответов


для тех, кто не может разобрать аргументы и все еще получить "ошибка: непризнанные аргументы:" я нашел обходной путь:

parser.add_argument('-d', '--dmp', nargs='+', ...)
opts = parser.parse_args()

и затем, когда вы хотите использовать его, просто сделайте

' '.join(opts.dmp)

простое решение: argparse рассматривает строку, заполненную пробелом, как один аргумент, если она инкапсулирована кавычками.

этот вход работал и "решил" проблему:

-d "C:\SMTHNG\Name with spaces\MORE\file.csv"

Примечание: аргумент имеет "" вокруг него.


столкнулся с этой проблемой сегодня тоже.

-d "foo bar"

не помогло. Я должен был добавить знак равенства

-d="foo bar"

и тогда это сработало.


после некоторых экспериментов (python 2.7 Win10) я обнаружил, что золотое правило-ставить кавычки ( "" ) вокруг аргументов, которые содержат пробелы и do не put, если в аргументе нет пробелов. Даже если вы передаете строку/путь. Также поставив одинарные кавычки ( " ) - плохая идея, по крайней мере для Windows.

маленький пример: python script.py -путь ....\Some_Folder\ --string "здесь идет строка"