Imprimer ligne contenant “mot” python
Je voudrais imprimer SEULEMENT la ligne qui contient "Serveur" dans le dessous de la pièce de sortie:
Date: Sun, 16 Dec 2012 20:07:44 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: PREF=ID=da8d52b67e5c7522:FF=0:TM=1355688464:LM=1355688464:S=CrK5vV-qb3UgWUM1; expires=Tue, 16-Dec-2014 20:07:44 GMT; path=/; domain=.google.com
Set-Cookie: NID=67=nICkwXDM6H7TNQfHbo06FbvZhO61bzNmtOn4HA71ukaVDSgywlBjBkAR-gXCpMNo1TlYym-eYMUlMkCHVpj7bDRwiHT6jkr7z4dMrApDuTk_HuTrZrkoctKlS7lXjz9a; expires=Mon, 17-Jun-2013 20:07:44 GMT; path=/; domain=.google.com; HttpOnly
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Connection: close
Cette information est récupérée à partir d'une liste appelée websiteheaders. J'ai le dessous de morceau de code qui me rend fou qu'il ne fonctionne pas correctement...
for line in websiteheaders:
if "Server" in line:
print line
Maintenant au-dessus de cette partie de code imprime exactement le même bloc de texte qui est décrit au début de mon post. J'ai juste ne semble pas comprendre pourquoi il le fait...
Comme je l'ai dit, je ne veux imprimer la ligne qui contient "Serveur", si possible sans regex. Et si pas possible, avec la regex.
S'il vous plaît aider et merci!
EDIT: Mon code complet à ce jour est collé ici: http://pastebin.com/sYuZyvX9
EDIT2: Pour être complet, dans hosts.txt il n'y a actuellement 1 hôte nommé "google.com"
Mise à jour
Mon code a été effectivement fonctionne très bien, mais il y avait une erreur dans un autre morceau de mon code qui a veillé à ce que les données qui ont été mises dans la liste websiteheaders était de 1 grande chaîne, au lieu de plusieurs entrées. Dans le ci-dessus morceau de code, il va bien sûr de trouver le "Serveur" et d'imprimer l'ensemble de l'entrée, qui dans mon cas était la (grande) de la chaîne.
À l'aide de
websiteheaders.étendre(en-têtes.splitlines())
au lieu de
websiteheaders.append(en-têtes)
a fait le tour pour moi. Merci beaucoup les gars.
- montrez-nous où vous créez websiteheaders...
- Qu'obtenez-vous si vous
print len(websiteheaders)
juste avant lafor line in websiteheaders:
boucle? En fait, ce n'print repr(websiteheaders)
donner? (Vous pouvez modifier la sortie dans votre question.) - Il sera de sortie 1 en fait.
- alors c'est ça le problème. Votre
websiteheaders
est une liste, mais c'est une liste avec une longue chaîne de caractères stockée en tant que son premier élément. Donc, depuisServer
est dans cette chaîne, il passe et l'imprime. Au lieu dewebsiteheaders.append(headers)
, utilisezwebsiteheaders.extend(headers.splitlines())
, de sorte que vous avez une liste contenant chaque ligne. - Merci, c'était bien la bonne réponse. J'ai toujours pensé que append était la voie à suivre.
Vous devez vous connecter pour publier un commentaire.
Est
websiteheaders
vraiment une liste qui est divisé pour très ligne? Parce que si c'est une chaîne, vous devez utiliser:Aussi, une bonne astuce: je vous conseille de l'ajout de certains
print
-déclarations sur rencontrer ce genre de problèmes. Si vous avez ajouté quelque chose comme:Vous auriez probablement attrapé que cette boucle n'était pas en boucle sur chaque ligne, mais sur chaque personnage.
Mise à jour
Je ne peux pas pipi ce qui est erroné avec votre code puis. C'est ce que j'obtiens:
text = '\n'.join(websiteheaders)
Mais ne vous inquiétez pas. Le problème est ailleurs. J'ai mis à jour ma réponse et pour moi votre code fonctionne bien. Votre liste est à la recherche la même que la mienne (voir ci-dessus)?print websiteheaders
juste avant la boucle et de la mise à jour de votre question avec votre liste.