Python 文件下载完成时中断for循环
在这里,我试图从URL列表(最大的图片)下载一个图片。我只想下载一张图片。由于图像已成功下载,我希望for循环立即停止。我很难在下面的代码中找到break语句的位置Python 文件下载完成时中断for循环,python,Python,在这里,我试图从URL列表(最大的图片)下载一个图片。我只想下载一张图片。由于图像已成功下载,我希望for循环立即停止。我很难在下面的代码中找到break语句的位置 for image_url in largest_images: # SOME VARIABLES timeout = 20 response = None file_name = md5(image_url) file_path = os.pa
for image_url in largest_images:
# SOME VARIABLES
timeout = 20
response = None
file_name = md5(image_url)
file_path = os.path.join(dst_dir, file_name)
try_times = 0
while True:
try:
try_times += 1
response = requests.get(image_url, headers=headers, timeout=timeout)
if response.status_code == 200:
print "Downloading: %s" % image_url
with open(file_path, 'wb') as f:
for chunk in response.iter_content(1024):
f.write(chunk)
response.close()
file_type = imghdr.what(file_path)
# if file_type is not None:
if file_type in ["jpg", "jpeg", "png", "bmp"]:
new_file_name = "{}.{}".format(file_name,file_type)
new_file_path = os.path.join(dst_dir, new_file_name)
shutil.move(file_path, new_file_path)
print ("## OK: {} {}".format(new_file_name, image_url))
break (I have added a break statement here, but its not working)
else:
os.remove(file_path)
print ("## Err: {}".format(image_url))
break
except Exception as e:
if try_times < 3:
continue
if response:
response.close()
print ("## Fail: {} {}".format(image_url, e.args))
break
对于最大\u图像中的图像\u url:
#一些变量
超时=20
响应=无
文件名=md5(图像url)
file_path=os.path.join(dst_目录,文件名)
尝试次数=0
尽管如此:
尝试:
尝试次数+=1
response=requests.get(image\u url,headers=headers,timeout=timeout)
如果response.status_code==200:
打印“下载:%s”%image\u url
打开(文件路径“wb”)作为f:
对于响应中的块。iter_内容(1024):
f、 写入(块)
答复:close()
文件类型=imghdr.what(文件路径)
#如果文件类型不是“无”:
如果文件\输入[“jpg”、“jpeg”、“png”、“bmp”]:
新建文件名=“{}.{}”。格式(文件名,文件类型)
new_file_path=os.path.join(dst_dir,new_file_name)
移动(文件路径、新文件路径)
打印(“##确定:{}{}”。格式(新文件名、图像url))
break(我在这里添加了break语句,但它不起作用)
其他:
删除(文件路径)
打印(“##错误:{}”。格式(图像url))
打破
例外情况除外,如e:
如果重试次数小于3次:
持续
如果回答:
答复:close()
打印(“##失败:{}{}”。格式(图像url,e.args))
打破
看起来每个图像url最多尝试3次。我建议在进入while循环之前,确保文件路径不存在,在完成while循环之后,检查文件路径中是否存在文件。如果存在文件,则从for循环中断。只需取出except中的文件并将其保留在try中即可