0

0

如何分块下载 Azure Blob 大文件并无缝合并为单个 CSV 文件

聖光之護

聖光之護

发布时间:2026-01-27 09:47:01

|

409人浏览过

|

来源于php中文网

原创

如何分块下载 Azure Blob 大文件并无缝合并为单个 CSV 文件

本文介绍一种内存友好的方式:通过按字节范围分块下载 azure blob 中的大 csv 文件,并在写入时直接追加到单一文件中,避免因截断行导致的数据损坏或解析错误。

在处理超大 CSV 文件(如数 GB 级)从 Azure Blob Storage 下载时,一次性加载到内存不仅低效,还极易触发 MemoryError。虽然分块下载(download_blob(offset=..., length=...))能有效缓解内存压力,但若将每块单独保存为独立 CSV 文件(如 chunk_1.csv, chunk_2.csv),后续合并将面临跨块行断裂(partial line)这一关键风险——例如某一行数据恰好被切分在两个相邻 chunk 的边界处,此时简单拼接二进制内容或调用 pd.concat() 都会破坏 CSV 结构,导致列错位、引号失配甚至解析失败。

✅ 正确解法是:只打开一个目标文件,以二进制写入模式("wb")初始化,然后逐块读取、连续写入。由于 Azure Blob 存储的 download_blob() 返回的是按指定字节范围精确提取的原始字节流,只要原始 CSV 文件本身是合法且连续存储的(无编码混杂、无 BOM 干扰),这种“流式拼接”即可 100% 还原原始文件字节顺序,包括换行符和所有转义字符。

以下是优化后的完整实现:

文希AI写作
文希AI写作

AI论文写作平台

下载
import os
from azure.storage.blob import BlobServiceClient

# 假设 blob_client 已正确初始化
dest_path = os.path.join(dest_folder, "merged_output.csv")

blob_properties = blob_client.get_blob_properties()
blob_size = blob_properties['size']
chunk_size = 100 * 1024 * 1024  # 100 MB

with open(dest_path, "wb") as f:  # ✅ 单次打开,全程写入
    for i in range((blob_size + chunk_size - 1) // chunk_size):
        start_offset = i * chunk_size
        end_offset = min(start_offset + chunk_size, blob_size)
        length = end_offset - start_offset

        # 下载当前 chunk 的原始字节
        blob_data = blob_client.download_blob(offset=start_offset, length=length)
        f.write(blob_data.readall())  # ✅ 直接追加,无中间文件

print(f"✅ 下载完成:{dest_path}({blob_size:,} 字节)")

⚠️ 注意事项:

  • 不要使用文本模式("w")或添加换行符:CSV 是二进制格式,必须用 "wb" 模式写入原始字节,否则可能因平台换行符转换(如 \r\n → \n)或编码隐式解码引发损坏。
  • 确保 blob 内容为纯 CSV 且无前置/后置元数据:该方法假设整个 blob 就是目标 CSV 文件本体。若 blob 包含 HTTP 头、ZIP 封装或 Base64 编码等,需先解包或解码。
  • 推荐配合进度提示与异常重试:生产环境建议加入 tqdm 进度条、max_retries 参数及 try/except 块,提升鲁棒性。
  • 无需额外“合并”步骤:此方案本质是流式重建,最终输出即为结构完整、可直接用 pandas.read_csv() 或任何 CSV 工具加载的合法文件。

总结:分块下载的核心价值在于控制内存占用,而保持数据完整性不依赖于“合并逻辑”,而在于严格维持原始字节流顺序。通过单文件流式写入,我们既规避了内存瓶颈,又彻底消除了行断裂风险——这才是处理大型文本 Blob 的最佳实践。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

56

2025.12.04

length函数用法
length函数用法

length函数用于返回指定字符串的字符数或字节数。可以用于计算字符串的长度,以便在查询和处理字符串数据时进行操作和判断。 需要注意的是length函数计算的是字符串的字符数,而不是字节数。对于多字节字符集,一个字符可能由多个字节组成。因此,length函数在计算字符串长度时会将多字节字符作为一个字符来计算。更多关于length函数的用法,大家可以阅读本专题下面的文章。

923

2023.09.19

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

408

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

418

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

2202

2024.03.12

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2065

2024.08.16

cdn加速软件有哪些
cdn加速软件有哪些

CDN加速软件可以帮助网站提高内容访问速度和用户体验,降低服务器负载。在选择CDN加速软件时,需要根据实际需求和预算进行权衡,选择合适的软件和服务商。cdn加速软件有AWS CloudFront、Azure Content Delivery Network、Google Cloud CDN、Fastly、Cloudflare和Incapsula。

319

2023.10.19

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

27

2026.01.26

edge浏览器怎样设置主页 edge浏览器自定义设置教程
edge浏览器怎样设置主页 edge浏览器自定义设置教程

在Edge浏览器中设置主页,请依次点击右上角“...”图标 > 设置 > 开始、主页和新建标签页。在“Microsoft Edge 启动时”选择“打开以下页面”,点击“添加新页面”并输入网址。若要使用主页按钮,需在“外观”设置中开启“显示主页按钮”并设定网址。

7

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.3万人学习

Rust 教程
Rust 教程

共28课时 | 4.9万人学习

Git 教程
Git 教程

共21课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号