自动每日下载

时间:2013-01-09 14:52:13

标签: python python-2.7 downloading

在我尝试编写脚本之前,我想知道程序是否已经存在。

我每天都会下载openstreetmap数据。每天使用命名约定'xxx.osc.gz'更新文件,文件获得1 up。 '001'到'002'。

我只能找到帮助镜像或安排下载的程序(osmosis或wget)。我不想每天都使用整个数据库,只需要最新的文件。

非常感谢任何有关正确方向的建议或意见。

1 个答案:

答案 0 :(得分:0)

有一个带有最新变更集的YAML文件。保留最新下载的记录,然后在该范围内使用urlretrieve

import os, urllib, yaml


os_url = "http://planet.openstreetmap.org/replication/"
base_dir = "./"

try:
    with open('download.log', 'r') as f:
        last_set = int(f.readlines()[-1].strip())
except:
    last_set = int(raw_input("Enter latest set:"))

stream = urllib.urlopen(os_url+"changesets/state.yaml")
latest_set = yaml.load(stream)['sequence']


for seq in range(last_set+1,latest_set+1):
    changeset_dir = "changesets/000/%03d/"%(seq/1000)
    changeset_file = "%03d.osm.gz"%(seq%1000)
    remote_file = os_url + changeset_dir + changeset_file
    local_dir = base_dir + changeset_dir
    local_file = local_dir + changeset_file

    if not os.path.exists(local_dir):
        os.makedirs(local_dir)

    try:
        with open(local_file) as f: pass
        print "Already downloaded",seq
    except:
        urllib.urlretrieve(remote_file, local_file)
        print "Downloaded changeset",seq

print "Up-to-date"


with open('download.log', 'a') as f:
    f.write('%s\n'%latest_set)