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. je veux obtenir
2
3
4
5
6
7
8
dix
11
12
13
14
15
16
18
19
20
21
22
23
24 code> p> 2,3,4,5,6,7,8, 10,11,12,13,14,15,16,18,19,20,21,22,23,24 code>
dans une seule chaîne. p> p>
4 Réponses :
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('[\'''\']')
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 CODE>
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.
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é?
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
J'ai pris portlist = [] de la boucle et je l'ai ajouté avant la boucle et le problème a été résolu.
Essayez d'exécuter
rstrip () code> sur chaque chaîne de port