{"id":655975,"date":"2026-01-05T10:22:09","date_gmt":"2026-01-05T02:22:09","guid":{"rendered":"http:\/\/puo.cn\/?p=655975"},"modified":"2026-01-05T10:26:36","modified_gmt":"2026-01-05T02:26:36","slug":"%e7%ac%ac%e4%b8%80%e6%ac%a1%e4%bd%bf%e7%94%a8python","status":"publish","type":"post","link":"http:\/\/puo.cn\/?p=655975","title":{"rendered":"\u7b2c\u4e00\u6b21\u4f7f\u7528python"},"content":{"rendered":"<p>\u7531\u4e8e\u9700\u8981\u8ba1\u7b972000-3000\u884c\u7269\u6d41\u62a5\u4ef7\uff0c\u603b\u4f53\u62a5\u4ef7\u6570\u91cf\u8d85\u8fc77500\u6761\uff0c\u4eba\u5de5\u592a\u6162\u5c31\u60f3\u8d77\u7528AI\u6765\u8fdb\u884c\u3002<\/p>\n<p>\u9009\u62e9\u4e86\u524d\u6bb5\u6355\u83b7\u7684\u8001\u5175\u7248\u7684chatgpt\uff0c\u5b83\u8ba9\u6211\u901a\u8fc7\u7f16\u5199\u811a\u672c\u4f7f\u7528python\u6765\u8ba1\u7b97\u6211\u6240\u9700\u8981\u7684\u516c\u91cc\u6570\uff1a<\/p>\n<blockquote><p>\u6211\u662f\u4e00\u5bb6\u4e0a\u6d77\u7684\u96c6\u88c5\u7bb1\u7269\u6d41\u516c\u53f8\u7684\u8d1f\u8d23\u4eba\uff0c\u8fd9\u4e2a\u8868\u683c\u662f\u4e00\u4e2a\u96c6\u88c5\u7bb1\u5361\u8f66\u62a5\u4ef7\u8868\u683c\uff0c\u6211\u60f3\u8ba9\u4f60\u5e2e\u6211\u6574\u7406\u4e00\u4e0b\u8fd9\u4e2a\u8868\u683c\u5185F\u5217\uff08\u95e8\u70b9\uff0c\u5177\u4f53\u5730\u5740\u6309\u5f53\u5730\u7684\u4eba\u6c11\u653f\u5e9c\u4f4d\u7f6e\uff0c\u4e00\u822c\u4e3a\u7981\u533a\uff0c\u8fd9\u91cc\u7684\u7981\u533a\u53ea\u505a\u95e8\u70b9\u8ddd\u79bb\u53c2\u8003\uff0c\u4e0d\u662f\u8f66\u8f86\u5b9e\u9645\u62b5\u8fbe\uff09\u5230\u4e0a\u6d77\u5e02\u6e2f\u5efa\u8def1\u53f7\u7684\u96c6\u88c5\u7bb1\u5361\u8f66\u4e94\u8f74\u8d27\u8fd0\u8f66\u8f86\u884c\u9a76\u8ddd\u79bb\uff0c\u7136\u540e\u628a\u8fd9\u4e2a\u6570\u636eM\u5217\uff08\u5916\u56db\u516c\u91cc\u6570\uff09\u91cc\u9762<\/p><\/blockquote>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-655988\" title=\"20260105182139757\" src=\"\/wp-content\/uploads\/replace\/786a88c7c813ff158a42cac0e42edf03.png\" alt=\"20260105182139757\" width=\"673\" height=\"511\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-655989\" title=\"20260105182139415\" src=\"\/wp-content\/uploads\/replace\/a53d5b58991b8064b53d5976c8ab20d3.png\" alt=\"20260105182139415\" width=\"744\" height=\"467\" \/> <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-655990\" title=\"20260105182139991\" src=\"\/wp-content\/uploads\/replace\/eb12327329f4f856aa5711e967f74afd.png\" alt=\"20260105182139991\" width=\"1024\" height=\"503\" \/> <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-655991\" title=\"20260105182139230\" src=\"\/wp-content\/uploads\/replace\/cc45f6f9fc7a72e8be90b121819b0b49.png\" alt=\"20260105182139230\" width=\"667\" height=\"812\" \/> <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-655992\" title=\"20260105182139356\" src=\"\/wp-content\/uploads\/replace\/703b09611277c07ad0ec71896482e342.png\" alt=\"20260105182139356\" width=\"976\" height=\"775\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>\u76f8\u5173\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<p>import requests<br \/>\nimport time<br \/>\nfrom openpyxl import load_workbook<\/p>\n<p>AMAP_KEY = &#8220;307eab613981673a2ccd4964e4cebe99&#8221;<\/p>\n<p>INPUT_EXCEL = &#8220;\u4e9a\u9a6c\u900a\u62a5\u4ef72026.xlsx&#8221;<br \/>\nOUTPUT_EXCEL = &#8220;\u4e9a\u9a6c\u900a\u62a5\u4ef72026_\u5c0f\u8f66\u516c\u91cc\u6570.xlsx&#8221;<\/p>\n<p>ORIGIN_ADDR = &#8220;\u4e0a\u6d77\u5e02\u6e2f\u5efa\u8def1\u53f7&#8221;<\/p>\n<p>ADDRESS_COL = 6<br \/>\nRESULT_COL = 13<br \/>\nSTART_ROW = 3<br \/>\nEND_ROW = 2068<\/p>\n<p>def normalize(addr):<br \/>\nreturn &#8220;&#8221;.join(<br \/>\n[p.strip() for p in str(addr).replace(&#8220;\\\\&#8221;, &#8220;\/&#8221;).split(&#8220;\/&#8221;) if p.strip()]<br \/>\n)<\/p>\n<p>def geocode(addr):<br \/>\nurl = &#8220;https:\/\/restapi.amap.com\/v3\/geocode\/geo&#8221;<br \/>\nparams = {&#8220;key&#8221;: AMAP_KEY, &#8220;address&#8221;: addr}<br \/>\ntry:<br \/>\nr = requests.get(url, params=params, timeout=10)<br \/>\nd = r.json()<br \/>\nexcept:<br \/>\nreturn None<br \/>\nif d.get(&#8220;status&#8221;) != &#8220;1&#8221;:<br \/>\nreturn None<br \/>\nloc = d[&#8220;geocodes&#8221;][0][&#8220;location&#8221;].split(&#8220;,&#8221;)<br \/>\nreturn float(loc[0]), float(loc[1])<\/p>\n<p>def driving(origin, dest):<br \/>\nurl = &#8220;https:\/\/restapi.amap.com\/v5\/direction\/driving&#8221;<br \/>\nparams = {<br \/>\n&#8220;key&#8221;: AMAP_KEY,<br \/>\n&#8220;origin&#8221;: f&#8221;{origin[0]},{origin[1]}&#8221;,<br \/>\n&#8220;destination&#8221;: f&#8221;{dest[0]},{dest[1]}&#8221;,<br \/>\n&#8220;strategy&#8221;: 10,<br \/>\n&#8220;extensions&#8221;: &#8220;base&#8221;,<br \/>\n}<br \/>\ntry:<br \/>\nr = requests.get(url, params=params, timeout=10)<br \/>\nd = r.json()<br \/>\nexcept:<br \/>\nreturn None<\/p>\n<p>if d.get(&#8220;status&#8221;) != &#8220;1&#8221;:<br \/>\nreturn None<\/p>\n<p>paths = d.get(&#8220;route&#8221;, {}).get(&#8220;paths&#8221;, [])<br \/>\nif not paths:<br \/>\nreturn None<\/p>\n<p>km = float(paths[0][&#8220;distance&#8221;]) \/ 1000.0<br \/>\nreturn km<\/p>\n<p>def main():<br \/>\nprint(&#8220;\u83b7\u53d6\u8d77\u70b9\u5750\u6807:&#8221;, ORIGIN_ADDR)<br \/>\norigin = geocode(ORIGIN_ADDR)<br \/>\nif not origin:<br \/>\nprint(&#8220;\u8d77\u70b9\u5931\u8d25\uff0c\u9000\u51fa&#8221;)<br \/>\nreturn<\/p>\n<p>print(&#8220;\u6253\u5f00 Excel:&#8221;, INPUT_EXCEL)<br \/>\nwb = load_workbook(INPUT_EXCEL)<br \/>\nws = wb.active<\/p>\n<p>if not ws.cell(2, RESULT_COL).value:<br \/>\nws.cell(2, RESULT_COL).value = &#8220;\u5916\u56db\u516c\u91cc\u6570(\u5c0f\u8f66)&#8221;<\/p>\n<p>cache_geo = {}<br \/>\ncache_dist = {}<\/p>\n<p>for row in range(START_ROW, END_ROW + 1):<br \/>\nval = ws.cell(row, ADDRESS_COL).value<br \/>\nif not val:<br \/>\ncontinue<br \/>\naddr = str(val).strip()<br \/>\nif not addr:<br \/>\ncontinue<\/p>\n<p>if ws.cell(row, RESULT_COL).value not in (None, &#8220;&#8221;):<br \/>\ncontinue<\/p>\n<p>print(f&#8221;\\n\u7b2c {row} \u884c:&#8221;, addr)<\/p>\n<p>if addr in cache_dist:<br \/>\nkm = cache_dist[addr]<br \/>\nelse:<br \/>\nif addr in cache_geo:<br \/>\ndest = cache_geo[addr]<br \/>\nelse:<br \/>\ndest = geocode(normalize(addr))<br \/>\nif not dest:<br \/>\nprint(&#8220;\u5730\u7406\u7f16\u7801\u5931\u8d25\uff0c\u8df3\u8fc7&#8221;)<br \/>\ncontinue<br \/>\ncache_geo[addr] = dest<br \/>\ntime.sleep(0.2)<\/p>\n<p>km = driving(origin, dest)<br \/>\nif km is None:<br \/>\nprint(&#8220;\u8def\u7ebf\u5931\u8d25\uff0c\u8df3\u8fc7&#8221;)<br \/>\ncontinue<\/p>\n<p>cache_dist[addr] = km<br \/>\ntime.sleep(0.2)<\/p>\n<p>r = round(km)<br \/>\nws.cell(row, RESULT_COL).value = r<br \/>\nprint(&#8220;\u5199\u5165:&#8221;, r, &#8220;km&#8221;)<\/p>\n<p>wb.save(OUTPUT_EXCEL)<br \/>\nprint(&#8220;\\n\u5b8c\u6210\uff0c\u5df2\u4fdd\u5b58:&#8221;, OUTPUT_EXCEL)<\/p>\n<p>if __name__ == &#8220;__main__&#8221;:<br \/>\nmain()<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u7531\u4e8e\u9700\u8981\u8ba1\u7b972000-3000\u884c\u7269\u6d41\u62a5\u4ef7\uff0c\u603b\u4f53\u62a5\u4ef7\u6570\u91cf\u8d85\u8fc77500\u6761\uff0c\u4eba\u5de5\u592a\u6162\u5c31\u60f3\u8d77\u7528AI\u6765\u8fdb\u884c\u3002 \u9009\u62e9\u4e86\u524d\u6bb5\u6355\u83b7\u7684\u8001\u5175\u7248\u7684chatgpt\uff0c\u5b83\u8ba9\u6211\u901a\u8fc7\u7f16\u5199\u811a\u672c\u4f7f\u7528python\u6765\u8ba1\u7b97\u6211\u6240\u9700\u8981\u7684\u516c\u91cc\u6570\uff1a \u6211\u662f\u4e00\u5bb6\u4e0a\u6d77\u7684\u96c6\u88c5\u7bb1\u7269\u6d41\u516c\u53f8\u7684\u8d1f\u8d23\u4eba\uff0c\u8fd9&#8230;<\/p>\n","protected":false},"author":1,"featured_media":655978,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[141],"tags":[144,995,994],"topic":[],"class_list":["post-655975","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tools-soft","tag-ai","tag-chatgpt","tag-python"],"_links":{"self":[{"href":"http:\/\/puo.cn\/index.php?rest_route=\/wp\/v2\/posts\/655975","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/puo.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/puo.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/puo.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/puo.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=655975"}],"version-history":[{"count":2,"href":"http:\/\/puo.cn\/index.php?rest_route=\/wp\/v2\/posts\/655975\/revisions"}],"predecessor-version":[{"id":655999,"href":"http:\/\/puo.cn\/index.php?rest_route=\/wp\/v2\/posts\/655975\/revisions\/655999"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/puo.cn\/index.php?rest_route=\/wp\/v2\/media\/655978"}],"wp:attachment":[{"href":"http:\/\/puo.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=655975"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/puo.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=655975"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/puo.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=655975"},{"taxonomy":"topic","embeddable":true,"href":"http:\/\/puo.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftopic&post=655975"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}