是否有任何庫可以在Python中的sys.argv中解析隨機鍵值對?解析未定義的參數
例如:
python run.py --v1 k1 --v2 k2 --v3 k3
應該返回我喜歡{V1-> K1,V2-> K2,V3-> K3}一本字典。在編譯時我不知道那些'v'是什麼。
謝謝!
厄爾
是否有任何庫可以在Python中的sys.argv中解析隨機鍵值對?解析未定義的參數
例如:
python run.py --v1 k1 --v2 k2 --v3 k3
應該返回我喜歡{V1-> K1,V2-> K2,V3-> K3}一本字典。在編譯時我不知道那些'v'是什麼。
謝謝!
厄爾
這是一種哈克,但你有這樣的:
import argparse
import collections
parser = argparse.ArgumentParser()
known, unknown_args = parser.parse_known_args()
unknown_options = collections.defaultdict(list)
key = None
for arg in unknown_args:
if arg.startswith('--'):
key = arg[2:]
else:
unknown_options[key].append(arg)
d = {}
for i,arg in enumerate(sys.argv):
if arg.startswith("--"):
d[arg[2:]] = sys.argv[i+1]
print d
這個解決方案會給連續的鍵帶來意想不到的結果(例如,當用'--foo --bar --baz'參數運行時) – lanzz
是的,它會......但那不是輸入OP指定。 ..如果它和他的例子一樣狹窄,那麼這將工作得很好:P ...如果他需要更多的智能......它很容易改變以滿足簡單的需求......如果他需要更先進的東西,應該使用評論 –
在使用字典理解,你可以使用一個襯墊這樣一個新的Python:
ll = sys.argv[1:]
args = {k[2:]:v for k,v in zip(ll[::2], ll[1::2])}
# {'v1': 'k1', 'v2': 'k2', 'v3': 'k3'}
它不具有任何靈活性,以防您的用戶擰緊配對,但它會是一個快速的st藝術。
一個發生器可用於彈出sys.argv[1:]
以外的字符串對。這將是建立靈活性和錯誤檢查的好地方。
def foo(ll):
ll = iter(ll)
while ll:
yield ll.next()[2:], ll.next()
{k:v for k,v in foo(ll)}
你打算如何使用那些你事先不知道的名字? – SingleNegationElimination
我建議像'--var v1 = k1 --var v2 = k2 --var v3 = k3'這樣的東西,而不是 – jterrace
在python中製作一個工具,它需要一個模板文件和一堆k-v對。類似於jinja2 –