从元组中提取信息(Python)

the*_*men 5 python parsing tuples list http-headers

我目前正在使用Python 2.7中的httplib库从网站获取一些标题,以建立a)下载的文件大小和b)文件的最后修改日期.我使用了一些在线工具,这些细节确实存在.

我目前正在编写我的Python代码脚本,它似乎正常工作,可以恢复所需的信息.尽管如此,包含标题信息的响应是包含多个元组的列表.答复的样本如下: -

[('content-length', '2501479'),
 ('accept-ranges', 'bytes'),
 ('vary', 'Accept-Encoding'),
 ('server', 'off'),
 ('last-modified', 'Thu, 20 Oct 2011 04:30:01 GMT'),
 ('etag', '"2c8171a-262b67-4afb368edfffc"'),
 ('date', 'Thu, 20 Oct 2011 16:01:11 GMT'),
 ('content-type', 'text/plain')]
Run Code Online (Sandbox Code Playgroud)

我要做的是基本上删除文件大小("2501479")和日期("星期四,2011年10月20日04:30:01 GMT").我有什么想法可以做到这一点?我最初尝试variable[0]但是这会回来"'content-length', '2501479'".我怎样才能单独返回文件大小(理论上是列表中第一个元组的第二部分!).

jte*_*ace 7

首先,通过将元组列表转换为字典,可以使其更容易使用:

>>> headers = [('content-length', '2501479'),
...  ('accept-ranges', 'bytes'),
...  ('vary', 'Accept-Encoding'),
...  ('server', 'off'),
...  ('last-modified', 'Thu, 20 Oct 2011 04:30:01 GMT'),
...  ('etag', '"2c8171a-262b67-4afb368edfffc"'),
...  ('date', 'Thu, 20 Oct 2011 16:01:11 GMT'),
...  ('content-type', 'text/plain')]
>>> 
>>> headers = dict(headers)
>>> int(headers['content-length'])
2501479
Run Code Online (Sandbox Code Playgroud)

对于日期,我会使用email.utils.parsedate函数将其转换为日期时间对象:

>>> import email.utils
>>> email.utils.parsedate(headers['date'])
(2011, 10, 20, 16, 1, 11, 0, 1, -1)
Run Code Online (Sandbox Code Playgroud)