web-dev-qa-db-fra.com

Lire l'objet fichier sous forme de chaîne dans python

J'utilise urllib2 à lire dans une page. Je dois faire un regex rapide sur la source et retirer quelques variables mais urllib2 se présente comme un objet fichier plutôt que comme une chaîne.

Je suis nouveau à python donc j'ai du mal à voir comment j'utilise un objet fichier pour ce faire. Existe-t-il un moyen rapide de le convertir en chaîne?

31
Oli

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 tous 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.

77
stesch

De la doc file.read () (mon accent):

file.read ([taille])

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

N'oubliez pas qu'une recherche d'expression régulière sur un objet chaîne de grande taille peut ne pas être efficace et envisagez d'effectuer la recherche ligne par ligne, en utilisant file.next () (un objet fichier est son propre itérateur).

13
gimel

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

Ce que vous faites devrait être assez simple, observez 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()
5
t3rse