Подтвердить что ты не робот

Прочитать файл-объект как строку в python

Я использую urllib2 для чтения на странице. Мне нужно сделать быстрое регулярное выражение на источнике и вытащить несколько переменных, но urllib2 представляет собой объект файла, а не строку.

Я новичок в python, поэтому я изо всех сил пытаюсь понять, как я использую объект file для этого. Есть ли быстрый способ преобразовать это в строку?

4b9b3361

Ответ 1

Вы можете использовать Python в интерактивном режиме для поиска решений.

если f - ваш объект, вы можете ввести dir(f), чтобы просмотреть все методы и атрибуты. Там один называется read. Введите help(f.read), и он сообщает, что f.read() - это способ получить строку из файлового объекта.

Ответ 2

Из документа file.read() (мой акцент):

file.read([размер])

Прочитайте файлы размером не более байтов (меньше, если чтение попадает в EOF до получения байтов размера). Если аргумент размера отрицательный или пропущен, прочитайте все данные до тех пор, пока не будет достигнута EOF. Байт возвращается как строковый объект. Пустая строка возвращается, когда EOF встречается немедленно. (Для определенных файлов, таких как ttys, имеет смысл продолжить чтение после того, как EOF попал.) Обратите внимание, что этот метод может вызывать базовую функцию F fread несколько раз, пытаясь получить как можно более близкие к размеру байты. Также обратите внимание, что в режиме без блокировки может быть возвращено меньше данных, чем было запрошено, даже если не задан параметр размера.

Помните, что поиск в регулярном выражении по большому строковому объекту может быть неэффективным и подумайте о том, чтобы выполнить поиск по строкам, используя file.next( ) (файловый объект является его собственным итератором).

Ответ 3

Майкл Фоорд, также известный как Voidspace, имеет отличный учебник по urllib2, который вы можете найти здесь: urllib2 - Отсутствующее руководство

То, что вы делаете, должно быть довольно простым, обратите внимание на этот пример кода:

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()