Puo's 菜园子 学习园地 http://puo.cn
易记网址: http://wordpress.cn.com

第一次使用python

由于需要计算2000-3000行物流报价,总体报价数量超过7500条,人工太慢就想起用AI来进行。

选择了前段捕获的老兵版的chatgpt,它让我通过编写脚本使用python来计算我所需要的公里数:

我是一家上海的集装箱物流公司的负责人,这个表格是一个集装箱卡车报价表格,我想让你帮我整理一下这个表格内F列(门点,具体地址按当地的人民政府位置,一般为禁区,这里的禁区只做门点距离参考,不是车辆实际抵达)到上海市港建路1号的集装箱卡车五轴货运车辆行驶距离,然后把这个数据M列(外四公里数)里面

20260105182139757

 

20260105182139415 20260105182139991 20260105182139230 20260105182139356

 

相关代码如下:

import requests
import time
from openpyxl import load_workbook

AMAP_KEY = “307eab613981673a2ccd4964e4cebe99”

INPUT_EXCEL = “亚马逊报价2026.xlsx”
OUTPUT_EXCEL = “亚马逊报价2026_小车公里数.xlsx”

ORIGIN_ADDR = “上海市港建路1号”

ADDRESS_COL = 6
RESULT_COL = 13
START_ROW = 3
END_ROW = 2068

def normalize(addr):
return “”.join(
[p.strip() for p in str(addr).replace(“\\”, “/”).split(“/”) if p.strip()]
)

def geocode(addr):
url = “https://restapi.amap.com/v3/geocode/geo”
params = {“key”: AMAP_KEY, “address”: addr}
try:
r = requests.get(url, params=params, timeout=10)
d = r.json()
except:
return None
if d.get(“status”) != “1”:
return None
loc = d[“geocodes”][0][“location”].split(“,”)
return float(loc[0]), float(loc[1])

def driving(origin, dest):
url = “https://restapi.amap.com/v5/direction/driving”
params = {
“key”: AMAP_KEY,
“origin”: f”{origin[0]},{origin[1]}”,
“destination”: f”{dest[0]},{dest[1]}”,
“strategy”: 10,
“extensions”: “base”,
}
try:
r = requests.get(url, params=params, timeout=10)
d = r.json()
except:
return None

if d.get(“status”) != “1”:
return None

paths = d.get(“route”, {}).get(“paths”, [])
if not paths:
return None

km = float(paths[0][“distance”]) / 1000.0
return km

def main():
print(“获取起点坐标:”, ORIGIN_ADDR)
origin = geocode(ORIGIN_ADDR)
if not origin:
print(“起点失败,退出”)
return

print(“打开 Excel:”, INPUT_EXCEL)
wb = load_workbook(INPUT_EXCEL)
ws = wb.active

if not ws.cell(2, RESULT_COL).value:
ws.cell(2, RESULT_COL).value = “外四公里数(小车)”

cache_geo = {}
cache_dist = {}

for row in range(START_ROW, END_ROW + 1):
val = ws.cell(row, ADDRESS_COL).value
if not val:
continue
addr = str(val).strip()
if not addr:
continue

if ws.cell(row, RESULT_COL).value not in (None, “”):
continue

print(f”\n第 {row} 行:”, addr)

if addr in cache_dist:
km = cache_dist[addr]
else:
if addr in cache_geo:
dest = cache_geo[addr]
else:
dest = geocode(normalize(addr))
if not dest:
print(“地理编码失败,跳过”)
continue
cache_geo[addr] = dest
time.sleep(0.2)

km = driving(origin, dest)
if km is None:
print(“路线失败,跳过”)
continue

cache_dist[addr] = km
time.sleep(0.2)

r = round(km)
ws.cell(row, RESULT_COL).value = r
print(“写入:”, r, “km”)

wb.save(OUTPUT_EXCEL)
print(“\n完成,已保存:”, OUTPUT_EXCEL)

if __name__ == “__main__”:
main()

打赏
谢谢谅解上文的粗糙,允许转载,请注明转载地址:Puo's 菜园子 » 第一次使用python
分享到

评论 抢沙发

做一个好的个人学习园地

主要网建,域名、集装箱物流、生活方法论的学习及研究,整理等内容

我的原创博客-忆秋年Puo's菜园子-我的学习园地

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册