2017-10-12 57 views
-2

在这里,我试图从网址列表(largest_images)下载图像。我只想下载一张图片。当图像下载成功时,我希望for循环立即停止。我很难弄清楚在哪里把break语句放在下面的代码中。当文件下载完成时打破for循环

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  
+0

只要取出除了一个,并保持在尝试中的一个 –

回答

0

看起来你最多每次尝试3次image_url。我建议在进入while循环之前,确保file_path不存在,并且在完成while循环之后,检查file_path中是否存在文件。如果文件存在,则从for循环中跳出。