如何在Pandas DataFrame中为重复名称添加后缀以下载图片?
解决重复文件名的图片下载脚本优化
原代码问题分析
- 缩进错误:
requests.get(url)及后续代码未包含在for循环内,导致仅处理Excel最后一行数据 - 未实现重复文件名的后缀添加逻辑
- 存在未使用的冗余代码
file_name = url.split('/')
解决方案
先通过Pandas为重复名称生成带序号的文件名,再循环下载图片:
import requests import pandas as pd # 读取Excel数据 df = pd.read_excel(r'C:\Users\exdata1.xlsx') # 为每个名称生成重复计数,从0开始 df['count'] = df.groupby('name').cumcount() # 根据计数生成最终文件名 def generate_filename(row): if row['count'] == 0: return f"{row['name']}.jpeg" else: return f"{row['name']}-{row['count']}.jpeg" df['filename'] = df.apply(generate_filename, axis=1) # 循环下载图片 for index, row in df.iterrows(): url = row['url'] filename = row['filename'] try: r = requests.get(url) r.raise_for_status() # 捕获请求错误 with open(filename, "wb") as f: f.write(r.content) print(f"已保存:{filename}") except Exception as e: print(f"下载失败 {filename}:{str(e)}")
关键说明
groupby('name').cumcount():对每个name分组后,为组内每行分配从0开始的序号,第一个重复项序号为0,第二个为1,以此类推generate_filename函数:根据序号判断是否添加后缀,避免第一个文件出现名称-0.jpeg的情况- 添加
try-except块捕获网络请求异常,避免单个URL失败导致整个脚本终止
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

