我有一个用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,我不熟悉编码。
答案 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
进入循环。我认为这会产生最接近你预期的效果。每次迭代时,fileurl
和filename
变量都将更改为与.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)