python - 下载文件并根据csv重命名它们

时间:2017-09-17 13:11:05

标签: python python-3.x csv urllib

我有一个用Google表格创建的csv文件。它有两列:文件链接列A和名称列B.我在网站上发现了这个代码:

import csv
import urllib.request

with open('c:\\links.csv') as csvfile:
    reader = csv.reader(csvfile, delimiter=',', quotechar='|')
    for row in reader:
        fileurl = row[0]
        filename = row[1]
urllib.request.urlretrieve(fileurl, "E:\\" + filename)`

但它只下载了csv文件的最后一行。 我使用的是Python 3,我不熟悉编码。

3 个答案:

答案 0 :(得分:0)

当循环的每次迭代都覆盖最后一个赋值时,因此在循环结束后,您将获得变量的最后一行。

您可以检索循环内的url,并继续使用请求的逻辑,这样每行都会请求相关的url。

在请求每个网址后,我建议将其存储在列表中,因此在循环结束后,您将所有结果都放在名为res的列表中

import csv
import urllib.request
res = []
with open('c:\\links.csv') as csvfile:
    reader = csv.reader(csvfile, delimiter=',', quotechar='|')
    for row in reader:
        fileurl = row[0]
        filename = row[1]
        res.append(urllib.request.urlretrieve(fileurl, "E:\\" + filename))
        ...

答案 1 :(得分:0)

这是因为每次更新filename和fileurl变量时,当它们离开循环时,它们包含最后一行。要处理每一行,请在循环中添加最后一行。

答案 2 :(得分:0)

将呼叫移至urllib.request.ulrretrieve进入循环。我认为这会产生最接近你预期的效果。每次迭代时,fileurlfilename变量都将更改为与.csv中的条目匹配。

import csv
with open('c:\\links.csv') as csvfile:
    reader = csv.reader(csvfile, delimiter=',', quotechar='|')
    for row in reader:
        fileurl = row[0]
        filename = row[1]
        urllib.request.urlretrieve(fileurl, "E:\\" + filename)