2008-12-06 7 views
28

J'utilise urllib2 pour lire une page. J'ai besoin de faire une regex rapide sur la source et de retirer quelques variables mais urllib2 se présente comme un objet fichier plutôt qu'une chaîne. Je suis novice en python, donc j'ai du mal à voir comment j'utilise un objet fichier pour le faire. Existe-t-il un moyen rapide de convertir cela en chaîne?Lire l'objet fichier sous forme de chaîne en python

Répondre

74

Vous pouvez utiliser Python en mode interactif pour rechercher des solutions. Si f est votre objet, vous pouvez entrer dir(f) pour voir toutes les méthodes et les attributs. Il y en a un appelé read. Entrez help(f.read) et il vous indique que f.read() est le moyen de récupérer une chaîne à partir d'un objet fichier.

+3

Merci pour la réponse détaillée (en particulier pour trouver des attributs/méthodes d'objets). .read() a parfaitement fonctionné. – Oli

+5

Excellente réponse de l'école «enseigner à pêcher». Je vous donnerais +2 si je pouvais! –

+5

Parfois, tout ce que nous voulons est d'utiliser stackoverflow comme un livre de référence rapide. La réponse de Gimel est beaucoup plus utile aux googleurs. –

13

Du doc ​​file.read() (je souligne):

file.read ([size])

Lire la plupart des octets de taille du fichier (moins si la lecture frappe EOF avant d'obtenir des octets de taille). Si l'argument size est négatif ou omis, lisez toutes les données jusqu'à ce que EOF soit atteint. Les octets sont renvoyés sous forme d'objet chaîne. Une chaîne vide est renvoyée lorsque EOF est immédiatement rencontré. (Pour certains fichiers, comme ttys, il est logique de continuer à lire après la frappe d'un EOF.) Notez que cette méthode peut appeler la fonction C sous-jacente plus d'une fois pour obtenir des octets aussi proches que possible de la taille. Notez également qu'en mode non bloquant, moins de données que demandé peuvent être retournées, même si aucun paramètre de taille n'a été donné.

Soyez conscient que la recherche regexp sur un grand objet chaîne peut ne pas être efficace et envisager de faire la ligne par ligne de recherche, en utilisant file.next() (un objet de fichier est son propre itérateur).

5

Michael Foord, alias Voidspace a un excellent tutoriel sur urllib2 que vous pouvez trouver ici: urllib2 - The Missing Manual

Ce que vous faites devrait être assez simple, observer cet exemple de code:

import urllib2 
import re 
response = urllib2.urlopen("http://www.voidspace.org.uk/python/articles/urllib2.shtml") 
html = response.read() 
pattern = '(V.+space)' 
wordPattern = re.compile(pattern, re.IGNORECASE) 
results = wordPattern.search(html) 
print results.groups() 
Questions connexes