处理argparse输入中的空格

时间:2013-08-10 00:09:43

标签: python command-line-arguments user-input argparse spaces

使用python和argparse,用户可以使用-d作为标志输入文件名。

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

但是,当路径包含空格时,这会失败。例如。

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

注意:这些空格会导致错误(标志只接受'C:SMTHNG \ Name'作为输入)。

error: unrecognized arguments: with spaces\MORE\file.csv

花了我更长的时间来找到这个问题的解决方案...... (没有为它找到Q& A所以我自己发帖子)

5 个答案:

答案 0 :(得分:33)

对于那些无法解析参数并仍然得到错误的人:无法识别的参数:"我找到了一个解决方法:

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

然后当你想要使用它时

' '.join(opts.dmp)

答案 1 :(得分:21)

简单的解决方案: 如果argparse用引号括起来,则将空格填充的字符串视为单个参数。

此输入有效并“解决”了问题:

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

注意:参数周围有“”。

答案 2 :(得分:3)

今天也陷入了这个问题。

-d "foo bar"

没有帮助。我不得不添加等号

-d="foo bar"

然后它确实有效。

答案 3 :(得分:1)

经过一些实验(python 2.7 Win10)后,我发现黄金法则是将引号("")放在包含空格的参数周围,如果有,则执行 NOT 在论证中没有空格。即使你传递一个字符串/路径。另外,单引号('')是一个坏主意,至少在Windows上是这样。

小例子: python script.py --path .... \ Some_Folder \ --string"这里有一个字符串"

答案 4 :(得分:-1)

您需要用引号将路径括起来,例如:

python programname.py -path "c:\My path with spaces"

在参数解析中,您会得到一个包含一个元素的列表。然后你必须像这样阅读它:

path = args.path[0]