我有下面的代码,我正在尝试使用 overpy 对文件进行反向地理编码。在尝试做到这一点时,我面临着几个问题
1)为了避免 Overpytoomanyrequests 错误,我使用 Try except,每次出现错误时,while 循环都会从第一个开始,有没有办法让 while 循环从有错误的行恢复,而不是从第一个开始线? 2)还有少数数据点的纬度值超过90,我们可以编写代码来跳过这些数据不一致的行并处理下一行吗? 我尝试了通过、继续和下一步,所有这些最终都陷入无限循环
import overpy
import pandas as pd
import numpy as np
import time
import sys
df = pd.read_csv("/home/runner/sample_v1.csv")
df.sort_values(by=['cvdt35_timestamp_s'],inplace=True)
api= overpy.Overpass()
box = 0.0005
queries = []
names = []
highways =[]
results = []
df['Name']=''
df['Highway'] =''
while True :
try :
for row in df.index:
query = ('way["highway"~"."](around:15,{},{});(._;<;); out body;').format(df.gps_lat_dd.iloc[row], df.gps_lon_dd.iloc[row])
queries.append(query)
for i in range(len(queries)):
query = queries[i]
print(str(i)+', '+query)
result = api.query(query)
results.append(result)
for result in results:
n1 = []
h1 = []
for way in result.ways:
name = way.tags.get("name", "n/a")
n1.append(name)
highway = way.tags.get("highway", "n/a")
h1.append(highway)
names.append(','.join(n1))
highways.append(','.join(h1))
except overpy.exception.OverpassTooManyRequests:
time.sleep(10*6)
except overpy.exception.OverpassBadRequest:
next
break
df['Name']=names
df['Highway']=highways
示例数据
RecordID GPS_Latitude_Min_dec gps_lat_dd gps_lon_dd
947 1.6383 167.077305 333.077305
948 1.6383 167.077305 333.077305
881 0.4332 42.30722 -83.18112667
882 0.4333 42.30722167 -83.18112667
883 0.433 42.30721667 -83.181125
884 0.433 42.30721667 -83.181125
代码应忽略前两行并从第三行继续处理。感谢您提前的帮助
编辑如下
while True :
try :
for row in df.index:
query = ('way["highway"~"."](around:15,{},{});(._;<;); out body;').format(df.gps_lat_dd.iloc[row], df.gps_lon_dd.iloc[row])
queries.append(query)
for i in range(len(queries)):
query = queries[i]
print(str(i)+', '+query)
result = api.query(query)
results.append(result)
except overpy.exception.OverpassTooManyRequests:
time.sleep(10*6)
False
except overpy.exception.OverpassBadRequest:
False
continue
for result in results:
n1 = []
h1 = []
for way in result.ways:
name = way.tags.get("name", "n/a")
n1.append(name)
highway = way.tags.get("highway", "n/a")
h1.append(highway)
names.append(','.join(n1))
highways.append(','.join(h1))
但仍然是无限循环
最佳答案
您可以在唯一可以实际遇到异常的地方(使用 api 查询的地方)捕获 try/except block 。
如果您完成了该部分,则可以跳出 while 循环,然后仅附加实际结果。
import overpy
import pandas as pd
import numpy as np
import time
import sys
df = pd.read_csv("/home/runner/sample_v1.csv")
df.sort_values(by=['cvdt35_timestamp_s'],inplace=True)
api= overpy.Overpass()
box = 0.0005
queries = []
names = []
highways =[]
results = []
df['Name']=''
df['Highway'] =''
for row in df.index:
query = ('way["highway"~"."](around:15,{},{});(._;<;); out body;').format(df.gps_lat_dd.iloc[row], df.gps_lon_dd.iloc[row])
queries.append(query)
for i in range(len(queries)):
result = 0
query = queries[i]
print(str(i)+', '+query)
while True:
try:
result = api.query(query)
break
except overpy.exception.OverpassTooManyRequests:
time.sleep(10*6)
except overpy.exception.OverpassBadRequest:
break
if result:
results.append(result)
for result in results:
n1 = []
h1 = []
for way in result.ways:
name = way.tags.get("name", "n/a")
n1.append(name)
highway = way.tags.get("highway", "n/a")
h1.append(highway)
names.append(','.join(n1))
highways.append(','.join(h1))
df['Name']=names
df['Highway']=highways
关于Python-跳过有错误的行并处理下一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57998572/