在我尝试编写脚本之前,我想知道一个程序是否已经存在。
每天我都会下载openstreetmap数据。这些文件每天都会使用命名约定“xxx.osc.gz”进行更新,文件会被 1 up'd ex。“001”到“002”。
我只能找到帮助镜像或安排下载的程序(osmosis,或 wget)。我不希望每天都使用整个数据库,只需要最新的文件。
任何建议或指向正确方向将不胜感激。
在我尝试编写脚本之前,我想知道一个程序是否已经存在。
每天我都会下载openstreetmap数据。这些文件每天都会使用命名约定“xxx.osc.gz”进行更新,文件会被 1 up'd ex。“001”到“002”。
我只能找到帮助镜像或安排下载的程序(osmosis,或 wget)。我不希望每天都使用整个数据库,只需要最新的文件。
任何建议或指向正确方向将不胜感激。
有一个带有最新变更集的 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)