创建与互联网交互的程序时,经常需要下载文件来自网络服务器。在 Python 3 中,有多种方法可以完成此任务。
最初提供的代码遇到错误,因为函数需要 URL 参数为字节类型,但提取的JAD 文件中的 URL 是一个字符串。要在 URL 存储为字符串时下载文件,请使用 UTF-8 编码将其转换为字节类型:
<code class="python">import urllib.request def downloadFile(URL=None): h = urllib.request.urlopen(URL.encode('utf-8')) return h.read() downloadFile(URL_from_file)</code>
有多种替代方法从网络下载文件:
urllib.request.urlopen:通过读取urlopen的响应来获取网页内容:
<code class="python">response = urllib.request.urlopen(URL) data = response.read() # a `bytes` object text = data.decode('utf-8') # a `str`</code>
urllib.request.urlretrieve:下载并本地保存文件:
<code class="python">urllib.request.urlretrieve(URL, file_name)</code>
urllib.request。 urlopen Shutil.copyfileobj:提供强烈推荐且最正确的文件下载方法:
<code class="python">with urllib.request.urlopen(URL) as response, open(file_name, 'wb') as out_file: shutil.copyfileobj(response, out_file)</code>
urllib.request.urlopen 写入字节对象:更简单的选项,但仅推荐用于小文件:
<code class="python">with urllib.request.urlopen(URL) as response, open(file_name, 'wb') as out_file: data = response.read() # a `bytes` object out_file.write(data)</code>
最后,即时提取压缩数据也是如此可能:
<code class="python">url = 'http://example.com/something.gz' with urllib.request.urlopen(url) as response: with gzip.GzipFile(fileobj=response) as uncompressed: file_header = uncompressed.read(64) # a `bytes` object</code>
以上是如何在 Python 3 中从网络下载文件?的详细内容。更多信息请关注PHP中文网其他相关文章!