Удалить строку внутри строки

1

Я работаю с 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, как указано выше?

Теги:
string
http

3 ответа

2
Лучший ответ

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, которая печатает строку в экранированной форме.

  • 0
    хорошая работа, даже не осознавал
  • 0
    Хорошее наблюдение; однако, это не отвечает на вопрос, как удалить строку .
Показать ещё 1 комментарий
1

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

print str(response.info())

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

  • 0
    да, он возвращает escape-строку Python и печатает кавычки и все. к чему я стремлюсь
  • 0
    Это не на моей машине. p печатает строку синтаксиса Python, тогда как print выдает многострочный вывод без видимых выходов.
Показать ещё 2 комментария
0

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

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

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

  • 0
    да, но я хочу сделать это таким образом

Ещё вопросы

Сообщество Overcoder
Наверх
Меню