2013-10-17 57 views
5

我解析一些命令行參數,其中大部分需要傳遞給一個方法,但不是全部。Python。 Argparser。刪除不需要的參數

parser = argparse.ArgumentParser() 
parser.add_argument("-d", "--dir", help = "Directory name", type = str, default = "backups") 
parser.add_argument("-n", "--dbname", help = "Name of the database", type = str, default = "dmitrii") 
parser.add_argument("-p", "--password", help = "Database password", type = str, default = "1123581321") 
parser.add_argument("-u", "--user", help = "Database username", type = str, default = "Dmitriy") 
parser.add_argument("-a", "--archive", help = "Archive backup", action="store_true") 
args = parser.parse_args() 

backup(**vars(args)) # the method where i need to pass most of the arguments, except archive. Now it passes all. 
+0

是複製指定參數和從中刪除歸檔,或複製除檔案以外的所有內容 – grim

+0

我對Python很新,你能幫我一下。我的列表理解技能爲0. – Anarion

+1

如果'backup'是您自己的函數,您可以將'** kwargs'添加到它的參數列表中。然後它會接受完整的'var(args)'而不抱怨。 – hpaulj

回答

5

無論是創建不具有密鑰生成新的詞典:

new_args = dict(k, v for k, v in args.items() if k != 'archive') 

或者從原來的詞典中刪除的關鍵:

archive_arg = args['archive'] # save for later 
del args['archive'] #remove it 
+0

所以,參數是一個元組字典?如何僅基於元組的一個值從字典中刪除元素? – Anarion

+0

非常感謝,這就是我所需要的,但不知道該怎麼做。 – Anarion

+1

@Aarion:'args.items()'返回一個鍵值對列表。 '如果k!='archive''保持鍵不是''檔案''的項目。 'dict'從結果元組('k,v')中構建一個新的字典。刪除密鑰更直接:'del args [key]'從字典中刪除密鑰。如果這個答案有幫助,請考慮接受答案。 –