在CSV文件中下载网址图片,并使用文件

时间:2018-04-13 16:51:19

标签: python-3.x csv

首先,我想为我的问题道歉。我是编程新手;每当我有机会,我只是想学习。我有一项工作任务,我无法解决。 我有一个包含三列的csv文件: VendorID - 发票#-URL

我需要从这些网址下载数千张图片。下载图像后,需要使用以下命名约定进行保存:

"#vendorID_Invoice"

例如:

VendorID发票#URL ABD 1234 www.example.com/"imagepath“ 图像名称= ABD_1234

我能够创建下载图像的脚本,但我无法弄清楚如何重命名部分。我最终创建了两个文件:一个只包含URL,另一个包含VendorID和Invoice#。我为下面的混乱代码道歉:

下载图片的脚本:

import urllib.request

import os

print(os.getcwd())
new_path = os.chdir('DirectoryPath')
print(os.getcwd())

filename = "imagescopy"

# open file to read
with open("{0}.csv".format(filename), 'r') as csvfile:
    # iterate on all lines
    fo = open("avidlogcopy.csv", "w")
    i = 0
    for line in csvfile:
        splitted_line = line.split(',')
        # check if we have an image URL
        if splitted_line[0] != '' and splitted_line[0] != "\n":
            token = splitted_line[0].rsplit('/', 1)[-1] #I was trying to name the images with the last item in the URL
            urllib.request.urlretrieve(splitted_line[0], token[:-1] + ".PDF")
            print(token + "Image saved for {0}".format("splitted_line[0]"))
            i = i +1
            fo.write(token)
        else:
            result_negative = print ("No result 
            for{0}".format("splitted_line[0]"))
            fo.write(result_negative + '\n')
    fo.close()

命名文件的脚本

import csv
with open('MRIdatadump.csv') as f:
    reader = csv.reader(f)
    with open('output.csv', 'w') as g:
        writer = csv.writer(g)
        for row in reader:
            new_row = ['_'.join([row[0], row[1]])] + row[2:]
            new_name = new_row[0]
            print(new_name)
            writer.writerow(new_row)

我希望你能帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

由于我无法访问您的CSV文件,因此我必须假设您已正确解析部分。根据您提供的信息和代码,splitted_line = line.split(',')应该是一个包含三个对象的数组:

splitted_line[0] # Contains Vendor ID
splitted_line[1] # Contains Invoice number
splitted_line[2] # Contains URL

urrlib文档中,您可以看到您可以将所需的本地文件名作为urllib.request.urlretrieve的第二个参数,正如您所尝试的那样。

我建议如下:而不是这样做

urllib.request.urlretrieve(splitted_line[0], token[:-1] + ".PDF")

我们创建我们的文件名并使用它就像这样

vendorID = splitted_line[0]
invoiceNr= splitted_line[1]
urllib.request.urlretrieve(splitted_line[0], "{}_{}".format(vendorID,invoiceNR))

现在,由于您还没有提供可运行的代码,因此我无法检查这是否有效。将来我建议你MVCE

希望它有所帮助!