python 2.7 - 如何从CSV文件中的URL列表保存图片到目录

1 投票
2 回答
1790 浏览
提问于 2025-04-18 12:51

我有一个CSV文件,里面有两列,一列是图片名称,另一列是图片网址...

示例

列A -- 列B

image1 -- http://www.image1.jpg

image2 -- http://www.image2.jpg

我想用Python 2.7写一个脚本,打开这个CSV文件,把里面的图片保存到一个叫c:\images的文件夹里,并且用对应的图片名称来命名,比如“image1”、“image2”等。

到目前为止,我有以下代码:

import requests
import csv
import urllib2

images = csv.reader(open('image_urls.csv'))
for image in images:
    response = urllib2.urlopen(image[0])
    filename = 'image_{0}.{1}.jpg' 
    with open(filename,'wb') as w:
        w.write(response)
        w.close()

我遇到了两个问题:

1) 我不太确定如何正确地把文件名保存为CSV第一列的名称(“image1”)。

2) 直接运行这段代码会出现以下错误:

Traceback (most recent call last):
  File "downloadimages.py", line 11, in <module>
    w.write(response)
TypeError: must be string or buffer, not instance

有没有人能帮我修复这个错误和代码,让我可以按照我想要的方式保存文件名?

非常感谢!

2 个回答

0

urllib2.urlopen 返回的是一个类似文件的对象,而不是一个字符串。所以你需要读取它的内容:

with open(filename,'wb') as w:
    w.write(response.read())
    w.close()
0

你可以使用urllib里的urlretrieve功能,把文件保存到你指定的位置。

from urllib import urlretrieve

with open ('image_urls.csv') as images:
    images = csv.reader(images)
    img_count = 1  # start at 1
    for image in images:
        urlretrieve(image[0],
                'c:\\images\\image_{0}.jpg'.format(img_count)) # string formatting inserting count 
        img_count += 1 # increase count for each image.

撰写回答