Python Argparse:多参数处理

Python Argparse:多参数处理,python,bash,python-2.7,function,argparse,Python,Bash,Python 2.7,Function,Argparse,我是argparse的初学者,我对以下代码有疑问: def (x,y,z,t): ...... def main(): parser=argparse.ArgumentParser(description= "Get Mapped Single PDB File") parser.add_argument("-pdb", dest="pdbfile", help="Single Template PDB File") pa

我是argparse的初学者,我对以下代码有疑问:

def (x,y,z,t):

......
def main():

    parser=argparse.ArgumentParser(description= "Get Mapped Single PDB File")
    parser.add_argument("-pdb", dest="pdbfile",
                       help="Single Template PDB File")
    parser.add_argument("-sf", dest="file_of_seq",
                       help="Reference Seq File",)
    parser.add_argument("-rid", dest="refseqID", nargs=2,
                       help="Reference Seq ID")
    parser.add_argument("-cid", dest="chainID", nargs=2,
                       help="Chain ID")
    args=parser.parse_args()

    get_mapped_single_pdb(args.pdbfile, args.file_of_refseq, args.rid, args.cid)


if __name__=="__main__":
    main()
我想在bash屏幕上进行多处理或放置两个参数(我不知道如何称呼它),如下所示:

--python xxx.py-pdb abc-sf ghj-rid qwe bnm-cid jkl tyu

和“-rid”的第一个参数应该与“-cid”的第一个参数相关 “-rid”的第二个论点应该是。。。像


我试了很多方法,但我都想不出来。您有什么建议吗?

我希望使用该解析器和命令行

args.rid  # ['qwe', 'bnm']
args.cid  # ['jkl', 'tyu']
将第一个、第二个值等配对是标准的Python列表处理

调试时,我建议执行

print(args)
看看解析器给了你什么

你试过什么?有什么问题


您可以轻松地将这两个列表与标准的
for zip
语法配对:

In [120]: for id1, id2 in zip(args.chainID, args.refseqID):
     ...:     print(id1,id2)
     ...:     
     ...:     
A P02792_A96T
B P02794
或索引迭代:

In [122]: for i in range(2):
    ...:     print(args.chainID[i], args.refseqID[i])

什么是实际的
-rid
-cid
参数值?-rid是引用序列id,作为P08293,-cid是将pdb文件提取为A、B或C的链id。我想这样做,假设P08293与链A相关,P09134与链B相关。我有机会这样运行吗-rid P08293 P09134-cid A B。我想运行一次。并给出不同情况下的所有结果。谢谢名称空间(chainID=['A','B'],文件[u-seq='uniprot'u-Marc_-Vidal.fasta',pdbfile='1VLG_-A_14-155::1VLG_-C_18-159#1.pdb',refseqID=['P02792_-A96T','P02794'])。当我运行脚本一次时,我想做的是,首先运行带有P02792_A96T的链A,然后运行带有P02794的链B。我添加了一个使用
for…zip
对列表值进行配对的示例。感谢您的关注,但我还有一个问题:TypeError:无法连接“str”和“list”对象。我是否应该更改脚本,或者是否有任何方法可以在没有列表的情况下使用脚本,因为NARG正在创建列表,而我的脚本不接受列表对象?谢谢你没有告诉我们剧本接受了什么。带有
nargs=2
的2个参数生成列表,这些参数生成字符串。你必须相应地处理它们。
In [122]: for i in range(2):
    ...:     print(args.chainID[i], args.refseqID[i])