web-dev-qa-db-ja.com

argparse入力でスペースを処理する

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が見つからなかったので、自分で投稿しています)

24
ofer.sheffer

簡単な解決策:argparseは、スペースで埋められた文字列が引用符でカプセル化されている場合、単一の引数と見なします。

この入力は機能し、問題を「解決」しました。

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

注意:引数の周りには ""があります。

23
ofer.sheffer

引数を解析できず、「エラー:認識できない引数:」が引き続き表示される人のために、回避策を見つけました:

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

そしてそれを使いたいときは

' '.join(opts.dmp)
35

今日もこの問題にぶつかった。

-d "foo bar"

助けにはならなかった。等号を追加する必要がありました

-d="foo bar"

そしてそれはうまくいきました。

3
Uwe Brandt

いくつかの実験(python 2.7 Win10)の後、ゴールデンルールはスペースを含む引数を引用符( "")で囲み、[〜#〜] not [〜#〜] put if引数にスペースはありません。文字列/パスを渡す場合でも。また、少なくともWindowsでは、単一引用符( '')を付けることはお勧めできません。

小さな例:python script.py --path ....\Some_Folder\--string "ここに文字列が入ります"

1
cy8g3n