Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 下载文件时URL检索挂起_Python_Urllib - Fatal编程技术网

Python 下载文件时URL检索挂起

Python 下载文件时URL检索挂起,python,urllib,Python,Urllib,我有一个非常简单的脚本,它使用urllib检索zip文件并将其放在我的桌面上。zip文件的大小只有几MB,下载不需要很长时间。但是,脚本似乎没有完成,只是挂起了。是否有办法强制关闭urlretrieve?…或更好的解决方案 该URL为公共ftp大小。ftp可能是原因吗 我正在使用python 2.7.8 url = r'ftp://ftp.ngs.noaa.gov/pub/DS_ARCHIVE/ShapeFiles/IA.ZIP' zip_path = r'C:\Users\***\Deskto

我有一个非常简单的脚本,它使用urllib检索zip文件并将其放在我的桌面上。zip文件的大小只有几MB,下载不需要很长时间。但是,脚本似乎没有完成,只是挂起了。是否有办法强制关闭urlretrieve?…或更好的解决方案

该URL为公共ftp大小。ftp可能是原因吗

我正在使用python 2.7.8

url = r'ftp://ftp.ngs.noaa.gov/pub/DS_ARCHIVE/ShapeFiles/IA.ZIP'
zip_path = r'C:\Users\***\Desktop\ngs.zip'

urllib.urlretrieve(url, zip_path)
提前谢谢

---编辑---

能够使用ftplib完成任务

import os
from ftplib import FTP
import zipfile

ftp_site = 'ftp.ngs.noaa.gov'
ftp_file = 'IA.ZIP'
download_folder = '//folder to place file'
download_file = 'name of file'
download_path = os.path.join(download_folder, download_file)

# Download file from ftp
ftp = FTP(ftp_site)
ftp.login()
ftp.cwd('pub/DS_ARCHIVE/ShapeFiles') #change directory
ftp.retrlines('LIST') #show me the files located in directory
download = open(download_path, 'wb')
ftp.retrbinary('RETR ' + ftp_file, download.write)
ftp.quit()
download.close()

# Unzip if .zip file is downloaded
with zipfile.ZipFile(download_path, "r") as z:
    z.extractall(download_folder)

您可以将python请求库与请求ftp模块一起使用。它提供了更简单的API和更好的异常处理。请参阅:并且

urllib对错误捕获和调试的支持非常差。urllib2是一个更好的选择。urllib2中的
urlretrieve
等效项为:

resp = urllib2.urlopen(im_url)
with open(sav_name, 'wb') as f:
  f.write(resp.read())
要捕获的错误有:

urllib2.URLError, urllib2.HTTPError, httplib.HTTPException

如果网络关闭,您还可以捕获socket.error

我无法将其作为
节点名或提供的服务器名工作,或者不知道
您是否有意将regexp用于url和zip_路径而不是字符串?@EriksDobelis不确定您的意思。。。?我对python相当陌生,所以不确定区别…前缀为r的字符串是正则表达式而不是普通字符串。请参阅@EriksDobelis前缀为r的字符串是原始字符串,因此对正则表达式很有帮助。您会发现原始字符串也是文件名和URL的理想选择。