如何批量下载CSV中URL图片并按VendorID_Invoice#规则重命名
批量下载CSV中URL图片并按规则命名的解决方案
嘿,作为编程新手碰到这种批量处理的需求确实有点挠头,不过用Python就能轻松搞定!下面是一套完整的实操方案,跟着一步步来就行:
准备工作
首先得装两个Python工具库,用来处理CSV和下载图片:
pandas:负责读取和解析CSV文件里的内容requests:负责从URL下载图片
打开命令提示符(Windows)或终端(Mac/Linux),输入下面的命令安装:
pip install pandas requests
完整代码示例
把下面的代码存成download_images.py,再把你的CSV文件(比如叫invoices.csv)和这个脚本放在同一个文件夹里:
import pandas as pd import requests import os # 先建个存放图片的文件夹,没有的话自动创建 save_folder = "downloaded_images" if not os.path.exists(save_folder): os.makedirs(save_folder) # 读取CSV文件,注意这里的列名要和你的CSV完全对应(包括大小写、特殊符号) df = pd.read_csv("invoices.csv") # 逐行处理每一条数据 for index, row in df.iterrows(): vendor_id = str(row["VendorID"]) invoice_num = str(row["Invoice#"]) image_url = row["URL"] # 生成目标文件名,同时处理文件名里不能有的特殊字符(比如/:*?"<>|) filename = f"{vendor_id}_{invoice_num}" filename = filename.replace('/', '_').replace(':', '_').replace('*', '_').replace('?', '_').replace('"', '_').replace('<', '_').replace('>', '_').replace('|', '_') # 给文件名加后缀,这里默认用jpg,要是有多种格式可以从URL提取 filename += ".jpg" save_path = os.path.join(save_folder, filename) try: # 发送请求下载图片,设置10秒超时防止卡住 response = requests.get(image_url, timeout=10) response.raise_for_status() # 如果URL打不开(比如404、500)就抛出错误 # 把图片内容写入本地文件 with open(save_path, "wb") as f: f.write(response.content) print(f"搞定:{filename}") except Exception as e: print(f"{vendor_id}_{invoice_num} 下载失败 - 原因:{str(e)}") print("所有任务都完成啦!")
小提示
- 列名要对应:代码里的
"VendorID"、"Invoice#"必须和你CSV里的列名完全一致,大小写、特殊符号都不能错 - 适配多种图片格式:如果你的图片有png、gif等格式,可以替换代码里的后缀部分,改成从URL自动提取:
import os.path # 从URL里截取出文件后缀 file_ext = os.path.splitext(image_url)[1] filename += file_ext - 网络慢的调整:要是你的网络不太稳定,可以把代码里的
timeout=10改成更大的数字,比如20
内容的提问来源于stack exchange,提问作者M.Romero
相关产品推荐
相关产品推荐

