从url下载图像并从csv文件中为其指定id

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从url下载图像并从csv文件中为其指定id相关的知识,希望对你有一定的参考价值。

我有一个包含列的csv文件:image_id,image_url

我需要从URL下载所有图像并将其保存为相应的image_id作为名称。有办法吗?

我知道你可以使用我在网上看过的代码中的python这样做

import cStringIO # *much* faster than StringIO
import urllib
import Image

try:
    file = 
urllib.urlopen('http://freegee.sourceforge.net/FG_EN/src/teasers_en/t_gee-power_en.gif')
    im = cStringIO.StringIO(file.read()) # constructs a StringIO holding the image
    img = Image.open(im)
    img.save('/home/wenbert/uploaderx_files/test.gif')
except IOError, e:
    raise e

但如果我可以自动化上传到GCP存储桶的过程,如何更好地引用csv中的url和文件名?

感谢我能得到的任何帮助。干杯!

答案

这应该有所帮助。使用csv module解析您的CSV文件。

例如:

# -*- coding: utf-8 -*-

import csv
import cStringIO # *much* faster than StringIO
import urllib
import Image

def downloadFile(imageID, url):
    try:
        file = urllib.urlopen(url)
        im = cStringIO.StringIO(file.read())  # constructs a StringIO holding the image
        img = Image.open(im)
        img.save('/home/wenbert/uploaderx_files/{0}.gif'.format(imageID))
    except IOError, e:
        raise e

with open('PATH_TO_.csv', 'rb') as csvfile:
    reader = csv.reader(csvfile, delimiter=',')
    next(reader, None)  # skip the headers
    for row in reader:
        print row
        downloadFile(row[0], row[1])
另一答案

我在下面制作了一个python脚本。我只在python 3.4.3中测试了这个,但是应该这样做。

希望这可以帮助。

import urllib, csv, requests, os
from pathlib import Path


spreadsheetAddress = 'C:\SOURCE\CSV\FILE.csv'
targetDirectory = 'C:\TARGET\IMAGE\SAVE\LOCATION\'

def getSpreadsheetContents(spreadsheetAddress):
    with open(spreadsheetAddress) as csvfile:
        readCSV = csv.reader(csvfile, delimiter=',')
        imageSet = {}
        for row in readCSV:
            if 'image_id' not in row:
                imageSet[row[0]] = row[1]
    return imageSet


if __name__ == "__main__":
    if os.path.exists(spreadsheetAddress) and os.path.exists(targetDirectory):
        imageDict = getSpreadsheetContents(spreadsheetAddress)
        for key, value in imageDict.items():
            if requests.get(value).status_code == 200:
                filename, file_extension = os.path.splitext(value)
                address = str(targetDirectory + "\" + key + file_extension)
                urllib.request.urlretrieve(value, address)
    else:
        raise Exception("File not found")

以上是关于从url下载图像并从csv文件中为其指定id的主要内容,如果未能解决你的问题,请参考以下文章

VBA - 转到网站并从保存提示下载文件

从带有 URL 的 .CSV 文件下载图像时出现 HTTP 403 我该怎么办?

从目录中为 CNN 加载 Keras 中的图像,但在 CSV 文件中添加标签

Alamofire 并从服务器下载图像 [已解决]

访问 URL 并使用 R 读取数据

如何在 Gatsby 中为我的可重用组件返回特定图像?