Python下载文件的11种方法概览

0 下载量 6 浏览量 更新于2024-08-28 收藏 585KB PDF 举报
本文主要介绍了Python中下载文件的11种方法,重点讲解了使用requests和wget模块,以及处理重定向、分块下载大文件和并行批量下载等场景。 在Python编程中,下载文件是常见的任务之一。文章首先提到了使用`requests`库的方法,通过`get`函数获取URL内容并将其保存到本地文件。例如,可以这样下载一个文件: ```python import requests url = 'http://example.com/file' response = requests.get(url) with open('myfile', 'wb') as f: f.write(response.content) ``` 接着,文章介绍了`wget`模块,这是Python的一个包,可以直接调用`wget.download()`来下载文件。在安装了wget模块之后,可以像这样下载Python的logo图片: ```python import wget url = 'http://example.com/python_logo.png' wget.download(url, 'path/to/save/image') ``` 对于会重定向的URL,`requests`库提供了处理重定向的功能。通过将`allow_redirects`参数设置为`True`,可以确保在重定向后仍能正确下载文件: ```python url = 'http://example.com/redirected_file' response = requests.get(url, allow_redirects=True) with open('myfile', 'wb') as f: f.write(response.content) ``` 对于大文件,为了避免一次性加载到内存中,可以采用分块下载。通过设置`stream=True`,然后逐块写入文件: ```python url = 'http://example.com/large_file' response = requests.get(url, stream=True) chunk_size = 1024 # 1KB with open('large_file', 'wb') as f: for chunk in response.iter_content(chunk_size): f.write(chunk) ``` 最后,文章提到了如何并行下载多个文件,这通常用于提高效率。可以利用`concurrent.futures.ThreadPoolExecutor`来创建线程池并发执行下载任务: ```python from concurrent.futures import ThreadPoolExecutor import os import time def download_file(url, save_path): response = requests.get(url) with open(save_path, 'wb') as f: f.write(response.content) urls = [('file1', 'http://example.com/file1'), ('file2', 'http://example.com/file2')] # 二维列表,包含文件名和URL start_time = time.time() with ThreadPoolExecutor() as executor: for file_name, url in urls: executor.submit(download_file, url, os.path.join('downloads', file_name)) print(f"下载完成,总耗时:{time.time() - start_time}秒") ``` 以上就是Python中下载文件的一些基本技巧,涵盖了单个文件下载、重定向处理、大文件分块下载以及多文件并行下载的实现方法。这些方法在实际开发中非常实用,可以根据具体需求选择合适的方式。