我目前正在使用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”)和日期(“星期四,2011年10月20日04:30:01 GMT”)。我有什么想法可以做到这一点?我最初尝试variable[0]
,但这会返回"'content-length', '2501479'"
。我怎样才能单独返回文件大小(理论上是列表中第一个元组的第二部分!)。
答案 0 :(得分: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)
答案 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 :(得分:2)
您只需再次索引它以访问元组。像
length = variable[0][1]
last_mod = variable[4][1]
表示大小和上次修改的日期。
注意:仅当content-length
和last-modified
的索引始终相同时才有效。
答案 3 :(得分:0)
你在阵列中有元组......幸运的是,你可以用同样的方式引用(或取消引用它们,取决于你的术语)......
所以v = x [0]会在你说出元组(“'content-length','2501479'”)和 v [0]会给你'content-length'而v [1]会给你'2501479'(虽然你可能想做一个int(v [0])就可能有一些错误检查。
你可能最好把那个数组放入dict中;因此,如果订单发生变化,您可以确定您的内容长度已经缩短。
谢天谢地,语法几乎相同 - 它使用[]运算符。但是,我将留给你看看python手册页,看看如何转换数组 - > dict(不能为你做任何事!!)
答案 4 :(得分: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')