从元组中提取信息(Python)

5

我目前正在使用Python 2.7中的httplib库获取网站的一些头信息,以建立下载文件的大小和文件的最后修改日期。我已经使用了一些在线工具,这些详细信息确实存在。

我目前正在编写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')]

我需要做的是提取文件大小("2501479")和日期("Thu, 20 Oct 2011 04:30:01 GMT")。你有什么建议吗?我最初尝试了variable[0],但这会返回"'content-length', '2501479'"。如何只返回文件大小(理论上来说,应该是列表中第一个元组的第二部分!)。
5个回答

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

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

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

4
首先,将元组转换为 dict,然后将值转换为 int 以获得一个数字:
response_tupels = [('content-length', '2501479'), ('accept-ranges', 'bytes'),]
response = dict(response_tupels)
try:
  content_length = int(response['content-length'])
except KeyError:
  raise # Handle missing content-length here

2
您只需要再次索引它,即可访问元组。如下所示:
length = variable[0][1]
last_mod = variable[4][1]

用于文件大小和最后修改日期的索引。

注意:仅当content-lengthlast-modified的索引始终相同时,此方法才有效。


0
mas = [('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')]
mas = dict(mas)
mas.get('content-length')

0

你在数组中有元组...幸运的是,你可以以相同的方式引用(或取消引用,这取决于你的术语)...

所以v = x [0]将给你如你所述的元组(“'content-length','2501479'”),而v [0]将给你'content-length',v [1]将给你'2501479'(虽然你可能想对其进行int(v [0])并进行一些错误检查。

如果顺序发生变化,您最好将该数组放入字典中;这样您就可以确保获取内容长度。

谢天谢地,语法几乎相同-它使用[]运算符。但是,我将让您查看Python手册,以了解如何将数组转换为字典(不能为您做所有事情!)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接