Удалить строку внутри строки - PullRequest
1 голос
/ 23 февраля 2010

Я работаю с urllib2 и пытаюсь извлечь заголовки в печатной форме из объекта Response.

В настоящее время я печатаю str(response.info()), однако то, что печатается, само по себе является строкой Python (по крайней мере, насколько я понимаю).

(Pdb) p str(response.info())
'Date: Tue, 23 Feb 2010 03:12:26 GMT\r\nServer: Apache\r\nVary: Accept-Encoding,User-Agent\r\nContent-Encoding: gzip\r\nContent-Length: 9045\r\nConnection: close\r\nContent-Type: text/html; charset=ISO-8859-1\r\n'

Мне нужно превратить эту строку в «настоящую» строку, например, путем оценки или чего-то подобного. Лучшее теоретическое решение, которое я нашел, это использовать:

s = str(response.info())
print s.decode("string_escape")

Но это не работает. Дальнейшее добавление к путанице заключается в том, как обрабатывать кавычки в строке: вызовы eval(s) и str(s) также не работают.

Есть ли какой-нибудь лучший способ извлечь необработанные заголовки в ответе без кавычек или метод декодирования строки s, как указано выше?

Ответы [ 3 ]

2 голосов
/ 23 февраля 2010

str(info()) дает нормальную строку:

>>> import urllib2
>>> f = urllib2.urlopen('http://tejp.de')
>>> print str(f.info())
Connection: close
Vary: Accept-Encoding
Content-Type: text/html
Accept-Ranges: bytes
ETag: "-807357257"
Last-Modified: Wed, 01 Jul 2009 10:05:34 GMT
Content-Length: 285
Date: Tue, 23 Feb 2010 03:24:10 GMT
Server: lighttpd/1.4.19

Только команда отладчика p выводит строку в экранированном виде.

1 голос
/ 23 февраля 2010

Из pdb это должно работать:

print str(response.info())

Не уверен, что это отвечает на ваш вопрос.

0 голосов
/ 23 февраля 2010

response.info() возвращает httplib.HTTPMessage, который ведет себя как отображение:

info = response.info()
for k, v in info.items():
  print '%s: %s' % (k, v)

Короче говоря, вы делаете это неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...