如何在Django 1.11(Python3.6)中从URL下载文本文件到项目目录
当然可以!用Python下载这些文本文件超简单的,结合你用的Python 3.6环境,我给你写个实用的脚本,还会考虑到异常处理和目录创建的细节,确保文件能顺利保存到指定目录且保留原文件名~
实现步骤与代码示例
1. 先安装依赖库
首先确保你安装了requests库(如果没装的话),选一个兼容Python 3.6的版本,在终端运行:
pip install requests==2.26.0
2. 编写下载脚本
下面的代码会遍历你提供的链接列表,逐个下载文件,保存到指定目录(比如./downloaded_files/),并且严格保留原文件名(file1.txt、file2.txt这些):
import os import requests def download_files(url_list, save_dir): # 自动创建保存目录,已存在的话不会报错 os.makedirs(save_dir, exist_ok=True) for url in url_list: try: # 发送GET请求获取文件内容,设置超时避免卡住 response = requests.get(url, timeout=10) response.raise_for_status() # 遇到HTTP错误(比如404、500)直接抛出异常 # 从URL里提取原文件名:拆分query参数中的file值 filename = url.split('file=')[-1] # 拼接完整的保存路径 save_path = os.path.join(save_dir, filename) # 以文本模式写入文件,用utf-8编码避免乱码 with open(save_path, 'w', encoding='utf-8') as f: f.write(response.text) print(f"✅ 成功下载:{filename}") except requests.exceptions.RequestException as e: print(f"❌ 下载{url}失败:{str(e)}") except Exception as e: print(f"⚠️ 处理{url}时出错:{str(e)}") # 替换成你的文件链接列表 file_urls = [ "http://mylinks/telechargement.php?file=file1.txt", "http://mylinks/telechargement.php?file=file2.txt", # 可以继续添加更多链接 ] # 指定你要保存的目录路径 save_directory = "./downloaded_files" # 执行下载任务 download_files(file_urls, save_directory)
3. 关键细节说明
- 目录自动创建:用
os.makedirs的exist_ok=True参数,不用担心目录已存在的问题; - 文件名保留:通过拆分URL中的
file=参数精准获取原文件名,完全符合你“不修改结构”的需求; - 异常防护:捕获了请求超时、HTTP错误等常见问题,单个文件下载失败不会导致整个脚本中断;
- 编码处理:默认用
utf-8编码写入,如果你的文本文件是其他编码(比如GBK),可以修改open函数里的encoding参数。
4. Django项目中使用的小提示
如果要在你的Django 1.11项目中运行这段代码,推荐把它做成自定义管理命令:
- 在你的app下创建
management/commands目录(记得加__init__.py); - 把上面的代码放到一个
.py文件里(比如download_text_files.py),并添加Django命令的必要结构:
from django.core.management.base import BaseCommand # 导入上面的download_files函数或者直接把代码写在这里 class Command(BaseCommand): help = '下载指定链接的文本文件到指定目录' def handle(self, *args, **options): # 这里调用download_files函数即可 file_urls = [ "http://mylinks/telechargement.php?file=file1.txt", "http://mylinks/telechargement.php?file=file2.txt", ] save_directory = "./downloaded_files" download_files(file_urls, save_directory) self.stdout.write(self.style.SUCCESS('所有下载任务完成!'))
之后你就可以在终端运行python manage.py download_text_files来执行下载了。
内容的提问来源于stack exchange,提问作者Fabe
相关产品推荐
相关产品推荐

