从多个含同名文件的URL下载并批量重命名图片
解决同名图片下载时自动递增命名的问题
直接修改你的代码,通过循环计数器和拆分文件名后缀的方式,就能实现下载时自动给同名文件加上递增编号:
import requests image_url =[ 'https://s3-eu-west-1.amazonaws.com/sheffdocfest.com/attachments/data/000/103/975/thumbnail/compressed.jpg', 'https://s3-eu-west-1.amazonaws.com/sheffdocfest.com/attachments/data/000/105/093/thumbnail/compressed.jpg', 'https://s3-eu-west-1.amazonaws.com/sheffdocfest.com/attachments/data/000/103/984/thumbnail/compressed.jpg', 'https://s3-eu-west-1.amazonaws.com/sheffdocfest.com/attachments/data/000/107/697/thumbnail/compressed.jpg' ] # 使用enumerate获取循环索引,start=1让编号从1开始 for idx, img in enumerate(image_url, start=1): # 拆分文件名和后缀 original_name = img.split('/')[-1] name_part, ext_part = original_name.rsplit('.', 1) # 从最后一个.拆分,避免文件名里有多个点的情况 # 拼接新文件名 file_name = f"{name_part}{idx}.{ext_part}" print(f"Downloading file:{file_name}") r = requests.get(img, stream=True) with open(file_name, 'wb') as f: for chunk in r: f.write(chunk)
关键部分说明:
enumerate(image_url, start=1):给每个URL分配一个从1开始的序号,确保第一个文件是compressed1.jpg,第二个是compressed2.jpg,以此类推。original_name.rsplit('.', 1):从文件名的最后一个.处拆分,既能处理compressed.jpg这种常规文件名,也能兼容image.v2.jpg这类带多个点的文件名,保证后缀拆分准确。f"{name_part}{idx}.{ext_part}":用f-string拼接新文件名,语法直观易懂,适合新手快速掌握。
如果之后需要避免覆盖本地已存在的编号文件,可以额外添加文件存在性判断逻辑,但当前需求下,上面的代码完全能满足按顺序自动命名的要求。
内容的提问来源于stack exchange,提问作者Katie
相关产品推荐
相关产品推荐

