从元组中提取信息(Python)

5 投票
5 回答
14193 浏览
提问于 2025-04-17 04:42

我现在在用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')]

我想做的是提取出文件大小(“2501479”)和日期(“Thu, 20 Oct 2011 04:30:01 GMT”)。有没有什么办法可以做到这一点?我最开始尝试用variable[0],但这返回的是"'content-length', '2501479'"。我该如何只返回文件大小(理论上是列表中第一个元组的第二部分)呢?

5 个回答

2

你只需要重新索引一下,就能访问到这个元组。就像这样:

length = variable[0][1]
last_mod = variable[4][1]

用于获取大小和最后修改的日期。

注意:这只有在content-lengthlast-modified的索引始终相同的情况下才有效。

4

首先,把这些元组(tuple)转换成一个字典(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
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

对于日期,我会使用 datetime 对象,把它转化为一个日期时间格式,这可以通过 email.utils.parsedate 函数来实现:

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

撰写回答