如何获取网上文件的创建日期(使用Python)?
问题描述:
我有一个python应用程序,它依赖于客户端从网站下载的文件。如何获取网上文件的创建日期(使用Python)?
该网站不在我的控制之下,没有API来检查文件的“最新版本”。
是否有一种简单的方式通过URL访问文件(在Python中),并检查它的日期(或大小),而不必每次都下载到客户机?
更新:感谢那些提到“最后修改”日期的人。这是看待的正确参数。
我想我没有足够好地阐述这个问题。我如何从python脚本执行此操作?我想申请检查文件,然后下载它(如果最后修改日期<当前文件日期)。
答
没有可靠的方法来做到这一点。对于你所知道的,这个文件可以通过Web服务器即时创建,而“这个文件有多大”这个问题没有意义。网络服务器可以选择提供Last-Modified标题,但它可以告诉你任何它想要的。
答
我建立了一个基于etags的工具。听起来很像你所描述的:
pfetch是一个扭曲的工具,可以按计划执行此操作,并且可以运行多个URL并在更改后触发事件(下载后)。这很简单,但仍然可能比你想要的更复杂。然而,正是你所要求的。
所以,请选择。 :)
答
要考虑到“最后修改”可能不存在:
>>> from urllib import urlopen >>> f=urlopen('http://google.com/') >>> i=f.info() >>> i.keys() ['set-cookie', 'expires', 'server', 'connection', 'cache-control', 'date', 'content-type'] >>> i.getdate('date') (2009, 1, 10, 16, 17, 8, 0, 1, 0) >>> i.getheader('date') 'Sat, 10 Jan 2009 16:17:08 GMT' >>> i.getdate('last-modified') >>>
现在你可以比较:
if (i.getdate('last-modified') or i.getheader('date')) > current_file_date: open('file', 'w').write(f.read())
另外你可能要考虑使用的ETag头(以与在请求中发送If-None-Match标头一起) – 2009-01-10 17:59:29