weixin_40825517
罗家马德里球迷
采纳率22.2%
2018-11-07 15:02 阅读 1.4k

如何用Python 3遍历循环下载CSV文件中内容链接的图片?

5

本人目前情况如下:

现在有个文件表(CSV),表中信息均为图片链接,如图1所示
图1

很明显,这里需要用到循环,因此我的代码如下:

import csv    #加载csv包便于读取csv文件
import requests

with open ('vehicles.csv','r',encoding = 'utf-8') as csvfile:
    reader = csv.reader(csvfile)
    links = [row[1] for row in reader]

for link in links:
    imgresponse = requests.get(link, stream=True)   #以流的方式打开
    image = imgresponse.content
    address="H:\程序语言学习用文件夹\Python\images"+"\\"   #保存地址
    i = 1
    try:
        with open(address+"{0}".format(i) ,"wb") as jpg: 
            jpg.write(image)
            i = i + 1
    except IOError:
        print("IO Error\n")
    finally:
        jpg.close

然而实际情况是,控制台没有报错,但图片只下载了一张,就是最后一张,而且它还被命名成了“1”??!!

求助各位大佬,我的代码到底哪里出了不妥?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • 已采纳
    m0_38124502 我不喜欢这个世界 2018-11-08 01:39

    把 i=1放在for link in links:的上面
    如果不放for循环上面,i每次循环都被初始化为 1 了,i = i+1虽然加了1,但是下一次循环,i又被初始化为1了。
    这样不管下载多少张图片 , 因为每次的 i 都为1,也就是所有的图片名字都是1,每次都被替换,最后只保留了最后的1
    也就只有一张图片了。

    点赞 1 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2018-11-07 15:30
     address="H:\程序语言学习用文件夹\Python\images"+"\\"   #保存地址
    路径的斜杠应该用双斜杠
    
    
    imgresponse = requests.get(link, stream=True)
    这里加上print(link)输出下地址对不对
    
    
     with open(address+"{0},jpg".format(i) ,"wb") as jpg: 
     否则丢失后缀名
    
    点赞 评论 复制链接分享

相关推荐