我写了一些代码来从URL下载一些文件,我把它放在一个dict中,然而,当我运行脚本时,一切运行正常,除非最后下载文件,它创建创建一个文件使用其中一个名称,然后我看到该文件越来越大,然后它再次变小。这个文件(mp4)总是无法播放/损坏,而且只有一个,它永远不会移动到另一个。知道发生了什么事吗?我的猜测是,不知何故python不断将不同的文件下载到一个本地文件并覆盖,我不明白为什么。
以下是代码:
import sys
import os
import re
import urllib
import urllib.request
urlfilebytes = urllib.request.urlopen('http://www.pbs.org/wgbh/nova/sciencenow/download/index.html')
urlfile = urlfilebytes.read().decode('utf-8')
urls = re.findall(r'(http://www-tc.pbs.org/wgbh/nova/sciencenow/media/downloads/\S+)"', urlfile)
print(urls)
names = re.findall(r'NSN_\S+.mp4', str(urls))
print(names)
names_to_urls = {}
for name in names:
for url in urls:
names_to_urls[name] = url
print(names_to_urls)
for key in names_to_urls.keys():
for value in names_to_urls.values():
urllib.request.urlretrieve(value, key)
答案 0 :(得分:2)
你想要的而不是你的for循环只是:
for name, url in zip(names, urls):
urllib.request.urlretrieve(url, name)
您不需要嵌套循环:您将获取URL与名称的所有组合,而不仅仅是匹配的URL和名称对。 zip(names, urls)
获取每个列表的第一项,然后是每个列表中的第二项,等等。