我手头有一个噩梦(或者可能很容易,我不知道)......所以我有一个在相当大的python脚本中运行的小函数......我已经在更大的脚本中解决了所有问题,最后脚本将调用我们的 web 地图服务并显示有问题的地块……我们有 20K 地块,其中只有 10 个地块的 Deedholder 名称中有“%”。所以这在 99% 的时间内都有效,但总是只有 1%(或者在这种情况下更少)
问题是,在极少数情况下,deedholder 名称中有百分号,当我提供 url 时,它找不到查询。所以我测试了很多名字,只有当名字中有百分号时它才会起作用。
所以前缀看起来像这样:
' https://cedar.integritygis.com/default.aspx?ql=Parcel&qf=REALDATA_DEEDHOLDER&qv= '
并将名称添加到末尾,如下所示:
“库珀迈克尔 A 和黛布拉 K”
我的代码可以很容易地用 '%20' 替换空格,用 '%26' 替换 & 等等。但是,当这是 deedholder 名称时,我该怎么办:
'SIEBELS LAWRENCE J (75%) & LOUISE F TRUST (25%)'
我无法成功地让这个查询工作。这是我的测试代码,其中仅包含相关功能:
import webbrowser, time
def FixURL(string):
## string = string.replace('%','~')
print string
fix_dict = {' ':'%20','!':'%21','"':'%22','#':'%23','$':'%24',
'&':'%26',"'":'%27','(':'%28',')':'%29',
'*':'%2A','+':'%2b','.':'%2E','/':'%2F',':':'%3A',
';':'%3B','?':'%3F','@':'%40','{':'%7B','{':'%7D'}
for k,v in fix_dict.iteritems():
if k in string:
string = string.replace(k,v)
## return string.replace('~','%25')
return string
if __name__ == '__main__':
# testing
easy = FixURL('COOPER MICHAEL A & DEBRA K')
prefix = 'https://cedar.integritygis.com/default.aspx?ql=Parcel&qf=REALDATA_DEEDHOLDER&qv='
url = '{}{}'.format(prefix,easy)
print easy
webbrowser.open(url)
time.sleep(15) # give it time to work
hard = FixURL('SIEBELS LAWRENCE J (75%) & LOUISE F TRUST (25%)')
print hard
url = '{}{}'.format(prefix,hard)
webbrowser.open(url)
我不知道如何“欺骗”它......你可以看到我不成功的尝试被注释掉了。有没有人有修复?我正在考虑做的一件事是从字典中删除空间并使用 '%20'.join(string.split()) 并测试列表中的每个项目以获取 url 的替换值......有什么想法吗?看来我又被 Python 挤压了。谢谢。
编辑:
从那以后,我已经完成了整个函数,并且只是 urllib.quote()。这是一个测试:
import webbrowser, urllib, time
prefix = 'https://cedar.integritygis.com/default.aspx?ql=Parcel&qf=REALDATA_DEEDHOLDER&qv='
easy = urllib.quote('COOPER MICHAEL A & DEBRA K')
url = '{}{}'.format(prefix,easy)
print easy
webbrowser.open(url)
time.sleep(15) # give it time to work
hard = urllib.quote('SIEBELS LAWRENCE J (75%) & LOUISE F TRUST (25%)')
print hard
url = '{}{}'.format(prefix,hard)
webbrowser.open(url)
这应该放大到提供的名称所拥有的地块...第一个有效,第二个无效,因为括号中的 % (我认为)。我得到 'ol 查询没有返回结果错误。