gpt4 book ai didi

python - 下载文件的上次修改时间与其 HTTP header 不匹配

转载 作者:可可西里 更新时间:2023-11-01 16:57:07 24 4
gpt4 key购买 nike

我有一段 Python 代码(无论好坏)检查本地文件与网络服务器上的同一文件。如果不存在,它会下载它,如果存在,它会根据服务器上同一文件的 HTTP header 检查下载文件的 os.stat 最后修改时间。

问题是,这两个数字似乎不相等,即使它们应该相等。这是代码:

from urllib import urlretrieve
from urllib2 import Request, urlopen
from time import strftime, localtime, mktime, strptime
from os import stat, path

destFile = "logo3w.png"
srvFile = "http://www.google.com/images/srpr/logo3w.png"

if path.exists(destFile):
localLastModified = stat(destFile).st_mtime
req = Request(srvFile)
url_handle = urlopen(req)
headers = url_handle.info()
srvLastModified = headers.getheader("Last-Modified")
srvLastModified = mktime(strptime(srvLastModified,
"%a, %d %b %Y %H:%M:%S GMT"))
print localLastModified, srvLastModified

else:
urlretrieve(srvFile, destFile)

print 语句的返回值(如果您运行代码两次)是 1334527395.26 1333350817.0

在我看来,这两者应该是相同的,但它们却截然不同。下载到本地的文件的修改日期实际上是下载到本地机器的日期,而不是服务器上的最后修改日期。

基本上我要做的就是保留文件的本地缓存(实际应用程序中会有很多文件),并在必要时下载它。我知道 Web 代理应该默认执行此操作,并且我正在运行存储这些文件的基本 WAMP 服务器,但我不确定如何将其应用于我的 PyQt 应用程序。可能有几十个文件需要下载和缓存,其中大约一半很少更改,因此我正在尝试确定检查和获取这些文件的最快方法。

也许这甚至不是解决问题的正确方法,所以如果有(更好/许多其他)方法可以做到这一点,我会洗耳恭听。

最佳答案

urllib.urlretrieve只需下载文件;它不会复制修改日期。您必须使用 os.utime 手动执行此操作:

import os

# current code
else:
headers = urlretrieve(srvFile, destFile)[1]
lmStr = headers.getheader("Last-Modified")
srvLastModified = mktime(strptime(lmStr, "%a, %d %b %Y %H:%M:%S GMT"))
os.utime(destFile, (srvLastModified, srvLastModified))

关于python - 下载文件的上次修改时间与其 HTTP header 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10175134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com