0
votes

Déplacer une liste dans une boucle vers une chaîne

Je suis TRING pour obtenir "porte-portes" dans une chaîne comme j'en ai besoin pour une commande dans le script.

J'ai essayé d'utiliser Join, en sortant de la boucle comme un Var global sans succès. Je l'obtiens toujours comme une liste ci-dessous.
2 3 4 5 6 7 8 dix 11 12 13 14 15 16 18 19 20 21 22 23 24 xxx

je veux obtenir 2,3,4,5,6,7,8, 10,11,12,13,14,15,16,18,19,20,21,22,23,24 dans une seule chaîne.


1 commentaires

Essayez d'exécuter rstrip () sur chaque chaîne de port


4 Réponses :


0
votes

Commentez ceci:

            for val in tempportlist:
                if val != None:
                    with open(full_path, 'r') as fgclistfile:
                        if servername.lower() in fgclistfile.read().lower():
                            portlist.append(port)
            ports_str = ','.join(portlist)
            print(ports_str)

Et mettez ceci après la fin de la boucle for:

temp = ','.join(portlist)

La méthode .join () prend une liste en tant que paramètre, pas une chaîne.

EDIT:

Ceci devrait être votre code de boucle:

portlist = str(portlist).strip('[\'''\']')


1 commentaires

La sortie est toujours verticale et sans virgule. 2 3 4 5 6 7 8 10 11 12 13 14 15 16 18 19 20 21 21 23 24



0
votes

Vous écrasez votre liste de ports à chaque itération, lorsque vous faites:

portlist.append(str(port).strip('[\'''\']'))
temp = ','.join(portlist)
print temp

Essayez ce qui suit pour voir votre liste augmenter à chaque itération:

portlist = str(portlist).strip('[\'''\']')

Déplacez la print temp hors de la boucle pour obtenir la liste complète imprimée une fois.


8 commentaires

Bien, cela m'a donné la liste mais pas une chaîne.


Il n'est toujours pas reproductible pour nous, car vous ne donnez pas les informations complètes. Pouvez-vous fournir la sortie?


bien sûr, la sortie est la même que précédemment 2 3 4 5 6 7 8 10 11 12 13 14 15 16 18 19 20 21 22 23 24


Cela ressemble à une ficelle pour moi. S'il s'agissait d'une liste, quelque chose comme [2, 3, 4, ..., 24] serait imprimé. Avez-vous utilisé correctement la jointure? Le mien est différent du vôtre, car j'utilise ',' comme séparateur.


J'ai. le fait est que la sortie est horizontale et n'a pas de virgule entre les nombres


À quoi ressemble la sortie de print portlist ?


Sortie verticale. [] ['2'] ['3'] ['4'] ['5'] ['6'] ['7'] ['8'] [] ['10'] ['11 '] [' 12 '] [' 13 '] [' 14 '] [' 15 '] [' 16 '] [] [' 18 '] [' 19 '] [' 20 '] [' 21 '] [ '22'] ['23'] ['24']


Cela indique que dans chaque boucle, vous obtenez une liste avec une seule chaîne comme entrée. Existe-t-il une autre boucle for dans laquelle le code affiché est intégré?



0
votes

J'ai déplacé `portlist = [] 'en dehors de la boucle et cela m'a donné une liste des ports.

def findservername():
portlist = []
if 'On' in line:
            tempportlist = []
            port1 = line.split(':')
            port = str(port1[0])
            port = port.strip(' ')
            servername = (str(port1[1]))
            servername = re.sub(r"\s+", "", servername)
            pattern = re.search(r'(?!E000)[A-Z]([^\sPDU]+)\d', str(port1))
            tempportlist.append(pattern)


            try:
                for val in tempportlist:
                    if val != None:
                        with open(full_path, 'r') as fgclistfile:
                            if servername.lower() in fgclistfile.read().lower():
                                portlist.append(port)
                                global temp
                                print temp

                            else:
                                print "Not found"               
                print portlist
            except StopIteration:
                pass


0 commentaires

0
votes

J'ai pris portlist = [] de la boucle et je l'ai ajouté avant la boucle et le problème a été résolu.


0 commentaires