2017-06-27 1 views
0

J'ai besoin d'analyser toutes les signatures que j'ai en entrée. Par exemple, mon entrée peut être:Python: resplit une liste optionparser

$ python script.py -i 4:64+0:0:1460:mss*20,7:mss,sok,ts,nop,ws:df:0

Je voudrais partager cette entrée à : et ,, de sorte que je me retrouve avec une liste qui ressemble à ceci:

['4', '64', '0', '1460', 'mss*20', '7', 'mss', 'sok', 'ts', 'nop', 'ws', 'df', '0']

Je peux ensuite faire une boucle ou un index pour analyser la position de mon article. Mon programme fonctionne lorsque j'utilise les fonctions input() et re.split(). Mais pas quand je veux mettre ma signature dans les arguments avec optparse.

Si quelqu'un peut m'aider, ce serait bien, merci pour votre aide.

Répondre

1

Je pense que c'est simple. La magie sont les fonctions de chaîne: replace et split. Fonction split Séparer une chaîne avec un séparateur donné à la liste. Mais vous ne pouvez pas utiliser d'espaces dans votre chaîne analysée, car le argparse pense qu'il s'agit d'un autre argument de ligne de commande.

est ici code complet de script.py

#!/usr/bin/env python 
# -*- coding: UTF-8 -* 

import argparse 

DESCRIPTION=u"My parser" 
def InitParser(): 
    parser = argparse.ArgumentParser(DESCRIPTION) 
    parser.add_argument(
     '-i', '--input', 
     help=u"Parameter splitted by comma or column" 
    ) 
    return parser 

def main(): 
    parser = InitParser() 
    args = parser.parse_args() 
    print "Parser args=", args 
    print 
    if args.input: 
     lst = args.input.replace(':',',').split(',') 
     print "Splited -i argument:" 
     print(lst) 
    else: 
     print "Missing -i argument" 
     return 

if __name__ == "__main__": 
    main() 

sortie du programme:

C:\temp\tem>script.py -i 4:64+0:0:1460:mss*20,7:mss,sok,ts,nop,ws:df:0 
Parser args= Namespace(input='4:64+0:0:1460:mss*20,7:mss,sok,ts,nop,ws:df:0') 

Splited -i argument: 
['4', '64+0', '0', '1460', 'mss*20', '7', 'mss', 'sok', 'ts', 'nop', 'ws', 'df', '0'] 
+0

Merci beaucoup pour votre aide !! –