如何在 Python 3 中使用存储在字符串中的 URL 从 Web 下载文件
当尝试从在 Python 3 中的 Web 服务器中,传递字符串作为 URL 可能会导致需要字节输入的错误。本文介绍了几种规避此问题并成功检索文件的方法。
使用 urllib.request.urlopen
要获取网页的内容,请使用 urllib .request.urlopen()。该函数返回一个响应对象,然后可以将其读入变量:
<code class="python">import urllib.request url = 'http://example.com/' response = urllib.request.urlopen(url) data = response.read() # a `bytes` object</code>
使用 urlib.request.urlretrieve
最直接的下载和下载方法保存文件是利用 urllib.request.urlretrieve 函数:
<code class="python">import urllib.request url = 'http://example.com/file.txt' urllib.request.urlretrieve(url, 'file.txt')</code>
此方法从指定的 URL 下载文件并在本地保存为 'file.txt'。
将 urlib.request.urlopen 与 Shutil.copyfileobj 结合使用
为了更好地控制下载过程,请使用 urllib.request.urlopen() 返回一个类似文件的对象。然后可以使用shutil.copyfileobj()将该对象复制到真实文件:
<code class="python">import urllib.request import shutil url = 'http://example.com/file.zip' with urllib.request.urlopen(url) as response, open('file.zip', 'wb') as out_file: shutil.copyfileobj(response, out_file)</code>
将下载存储为字节
如果速度是优先考虑的,则下载的数据可以直接存储到字节对象中,然后写入文件,尽管这仅适用于小文件:
<code class="python">import urllib.request url = 'http://example.com/icon.png' with urllib.request.urlopen(url) as response, open('icon.png', 'wb') as out_file: data = response.read() # a `bytes` object out_file.write(data)</code>
处理压缩文件
urllib.request.urlopen() 还可以用于处理压缩文件,前提是服务器支持随机访问:
<code class="python">import urllib.request import gzip url = 'http://example.com/archive.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 中成功从网络下载文件,即使 URL 存储为字符串。
以上是如何从 Python 3 中存储为字符串的 URL 下载文件?的详细内容。更多信息请关注PHP中文网其他相关文章!