首先,我想为我的问题道歉。我是编程新手;每当我有机会,我只是想学习。我有一项工作任务,我无法解决。 我有一个包含三列的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)
我希望你能帮我解决这个问题。
答案 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。
希望它有所帮助!