Leer el objeto archivo como cadena en python


Estoy usando urllib2 para leer en una página. Necesito hacer una expresión regular rápida en la fuente y extraer algunas variables, pero urllib2 se presenta como un objeto de archivo en lugar de una cadena.

Soy nuevo en python, así que estoy luchando para ver cómo uso un objeto file para hacer esto. Hay una forma rápida de convertir esto en una cadena?

Author: Oli, 2008-12-06

3 answers

Puede usar Python en modo interactivo para buscar soluciones.

Si f es su objeto, puede ingresar dir(f) para ver todos los métodos y atributos. Hay uno llamado read. Ingrese help(f.read) y le dice que f.read() es la forma de recuperar una cadena de un objeto file.

 76
Author: stesch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-06 12:47:18

Del archivo doc .read () (mi énfasis):

Archivo.read ([tamaño])

Leer como máximo los bytes de tamaño del archivo (menos si la lectura llega a EOF antes de obtener los bytes de tamaño). Si el argumento size es negativo u omitido, lea todos los datos hasta que se alcance EOF. Los bytes se devuelven como un objeto string. Se devuelve una cadena vacía cuando se encuentra EOF inmediatamente. (Para ciertos archivos, como ttys, tiene sentido continuar leyendo después de que se alcance un EOF.) Nota que este método puede llamar a la función C subyacente fread más de una vez en un esfuerzo por adquirir lo más cerca posible de bytes de tamaño. También tenga en cuenta que cuando está en modo sin bloqueo, se pueden devolver menos datos de los solicitados, incluso si no se proporcionó ningún parámetro de tamaño.

Tenga en cuenta que una búsqueda regexp en un objeto de cadena grande puede no ser eficiente, y considere hacer la búsqueda línea por línea, utilizando el archivo .next () (un objeto file es su propio iterador).

 13
Author: gimel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-06 13:17:21

Michael Foord, también conocido como Voidspace, tiene un excelente tutorial sobre urllib2 que puedes encontrar aquí: urllib2-El Manual que falta

Lo que está haciendo debe ser bastante sencillo, observe este código de ejemplo:

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
Author: t3rse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-12-06 13:17:59