2016-12-07 18 views
2

shlex.split()を使用するとき、どのように "値をスペースで囲んで"引用符を保持できますか?shlex.splitを使用しているときに引用符を保持する

s = "SOME_VAR=\"value with spaces\" VAR2=value2" 
shlex.split(s) 
['SOME_VAR=value with spaces', 'VAR2=value2'] 

Pythonのツールのあなたの選択は最適ではないかもしれない

+0

のshlexは実際のパーサーですので、あなたは、特殊文字をエスケープする必要があると思いますように思えます。たとえば、これは正しく解釈されます: '' SOME_VAR = \\\ "value \\ \\ spaces \\\" VAR2 = value2 "'。あなたがパーザを作り、shlexを再実装しなければならないので、私はあなたがこれらの文字をどうやってどうやってエスケープできるか正確にはわかりません... –

+1

引用符を維持したいと思った理由は何ですか?値が元々引用されていたスペースを含んでいると仮定すれば十分でしょうか? – joeb

+0

saltは、shlex.splitを使用して、msiexecへの呼び出しのパラメータを分割します。 https://github.com/saltstack/salt/blob/develop/salt/modules/win_pkg.py#L1132 値にスペースが含まれる場合があるmsiexecにキーと値のペアを提供しようとしています。 引用符が削除された場合、msiexecは最初のスペースの後のすべてをパラメータとして処理し、失敗します。 – lubyou

答えて

0

ありがとうございます。

方法について:

$ cat /tmp/tmp.py 
import csv 
import StringIO 

s = "SOME_VAR=\"value with spaces\" VAR2=value2" 
reader = csv.reader(StringIO.StringIO(s), csv.excel) 

for i in reader: 
    print i 

$ python /tmp/tmp.py 
['SOME_VAR="value with spaces" VAR2=value2'] 
関連する問題