【问题标题】:Python - compare last modified date of two files, local and remotePython - 比较两个文件的最后修改日期,本地和远程
【发布时间】:2017-04-04 11:58:08
【问题描述】:

我正在尝试实现一个 python 脚本,它将比较本地和远程托管文件的最后修改日期。

如果远程文件较新,它应该: - 删除本地文件 - 下载保留最后修改日期的远程文件

我找到的最接近的答案是Last Modified of file downloaded does not match its HTTP header,但我相信这会下载整个文件,因此不会节省太多资源/时间

我想做的只是查看远程文件的标题,而不是下载我认为应该更快的整个文件。

这是我当前的代码,非常混乱和无聊(请参阅字符串替换等)我确信有更好/更快的方法 - 你有什么建议?

    remote_source = 'http://example.com/somefile.xml'
    local_source = 'path/to/myfile.xml'
    if path.exists(local_source):
        local_source_last_modified = os.path.getmtime(local_source)
        local_source_last_modified = datetime.datetime.fromtimestamp(local_source_last_modified).strftime('(%Y, %m, %d, %H, %M, %S)')
        conn = urllib.urlopen(remote_source)
        remote_source_last_modified = conn.info().getdate('last-modified')
        remote_source_last_modified = str(remote_source_last_modified)
        remote_source_last_modified = remote_source_last_modified.replace(", 0, 1, 0)", ")")
        if local_source_last_modified < remote_source_last_modified:
            pass
        else:
            headers = urlretrieve(remote_source, local_source)[1]
            lmStr = headers.getheader("Last-Modified")
            remote_source_last_modified = mktime(strptime(lmStr, "%a, %d %b %Y %H:%M:%S GMT"))
            os.utime(local_source, (remote_source_last_modified, remote_source_last_modified))
    else:
        headers = urlretrieve(remote_source, local_source)[1]
        lmStr = headers.getheader("Last-Modified")
        remote_source_last_modified = mktime(strptime(lmStr, "%a, %d %b %Y %H:%M:%S GMT"))
        os.utime(local_source, (remote_source_last_modified, remote_source_last_modified))

【问题讨论】:

    标签: python


    【解决方案1】:

    以防万一有人读到这篇文章,这就是我最终得到的结果:

    def syncCheck(file_path):
        remote_source = 'http://example.com/' + os.path.basename(file_path)
        local_source = file_path
    
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'}
        response = requests.head(remote_source, headers = headers)
        remote_source_last_modified = response.headers["last-modified"]
        remote_source_last_modified = time.mktime(datetime.datetime.strptime(remote_source_last_modified[:-4], "%a, %d %b %Y %H:%M:%S").timetuple())
    
        try:
            if os.path.exists(local_source):
                local_source_last_modified = os.path.getmtime(local_source)
                if local_source_last_modified == remote_source_last_modified:
                    break
                else:
                    try:
                        os.remove(local_source)
                    except:
                        break
                    urlretrieve(remote_source, local_source)
                    os.utime(local_source, (remote_source_last_modified, remote_source_last_modified))
    
        else:
            urlretrieve(remote_source, local_source)
            os.utime(local_source, (remote_source_last_modified, remote_source_last_modified))
    
        except HTTPError, e:
            print("HTTP Error: " + str(e.fp.read()))
        except URLError, e:
            print("URL Error: " + str(e.reason))
    

    【讨论】:

      猜你喜欢
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多