You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Azure Blob读取GZip压缩文件并直接逐行处理

直接读取Azure Blob存储中的GZip压缩文件并逐行处理

你可以通过直接操作Blob流并结合解压流来实现逐行读取处理,无需将文件写入本地。以下是两种主流编程语言的实现示例:

.NET 实现

使用Azure.Storage.Blobs SDK,直接获取Blob的只读流,通过GZipStream解压后用StreamReader逐行读取:

using Azure.Storage.Blobs;
using System.IO.Compression;
using System.IO;

// 替换为你的存储连接字符串、容器名和Blob文件名
var blobServiceClient = new BlobServiceClient("your_storage_connection_string");
var containerClient = blobServiceClient.GetBlobContainerClient("your_container_name");
var blobClient = containerClient.GetBlobClient("target_file.gz");

// 打开Blob流,解压并逐行处理
using var blobStream = await blobClient.OpenReadAsync();
using var gzipStream = new GZipStream(blobStream, CompressionMode.Decompress);
using var reader = new StreamReader(gzipStream);

string line;
while ((line = await reader.ReadLineAsync()) != null)
{
    // 此处添加你的行处理逻辑
    Console.WriteLine(line);
}

Python 实现

使用azure-storage-blob库,将Blob内容读取到内存流中,通过gzip模块解压后逐行迭代:

from azure.storage.blob import BlobClient
import gzip
from io import BytesIO

# 替换为你的存储连接信息
blob_client = BlobClient.from_connection_string(
    conn_str="your_storage_connection_string",
    container_name="your_container_name",
    blob_name="target_file.gz"
)

# 读取Blob到内存流,解压后逐行处理
with BytesIO() as buffer:
    blob_client.download_blob().readinto(buffer)
    buffer.seek(0)  # 重置流指针至起始位置
    
    with gzip.GzipFile(fileobj=buffer, mode='rb') as gzip_file:
        for line_bytes in gzip_file:
            # 转换为字符串并处理
            line = line_bytes.decode('utf-8').strip()
            print(line)

核心要点

  • 无需本地文件:通过内存流直接处理Blob内容,避免磁盘IO开销
  • 内存高效:逐行读取模式不会将整个文件加载到内存,适合处理大体积压缩文件
  • 原生支持:利用语言内置的压缩流/模块和Azure SDK的流操作能力,实现无缝对接

内容的提问来源于stack exchange,提问作者NutsAndBolts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 19:06:00