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

如何无需完全解压即可提取.gz文件的部分内容

如何提取大体积csv.gz压缩包的前N行数据而不解压整个文件

.gz格式是流式压缩格式,完全不需要解压整个文件就可以提取前面部分的内容,以下是不同场景下的实现方案:

方案1:Linux/macOS 命令行(最便捷)

直接使用系统原生的gzip和head工具,全程流式处理,拿到指定行数后自动终止,仅会读取压缩包前部分内容,不会处理后续100多G的冗余数据:

  • 提取前100万行保存为sample.csv的命令:
    gzip -cd 你的文件.csv.gz | head -n 1000000 > sample.csv

参数说明:

  • gzip -c:将解压结果输出到标准输出流,不会生成完整的原始csv文件
  • gzip -d:指定执行解压操作
  • head -n 1000000:仅保留输入流的前100万行,读取到指定行数后立刻终止上游的gzip解压进程

如果要按字节提取(比如取压缩包前250M内容),可以用以下命令,注意该方案可能存在最后一行被截断的问题,优先推荐按行数提取:
head -c 250M 你的文件.csv.gz | gzip -cd > sample.csv

方案2:Windows 环境实现

方式A:使用Git Bash/WSL

安装Git Bash或者开启WSL(Windows Linux子系统)后,直接运行上述Linux命令即可,体验和Linux完全一致。

方式B:PowerShell原生实现

不想安装额外工具的话,可以使用PowerShell的内置压缩库实现流式读取:

$limit = 1000000
$reader = New-Object System.IO.StreamReader(New-Object System.IO.Compression.GzipStream([System.IO.File]::OpenRead("你的文件.csv.gz"), [System.IO.Compression.CompressionMode]::Decompress))
$writer = New-Object System.IO.StreamWriter("sample.csv")
$count = 0
while($count -lt $limit -and ($line = $reader.ReadLine()) -ne $null) {
    $writer.WriteLine($line)
    $count++
}
$reader.Close()
$writer.Close()

方案3:Python 跨平台实现

如果需要嵌入脚本或者自定义处理逻辑,可以用Python的gzip库流式读取,内存占用极低:

import gzip

LINE_COUNT = 1000000
INPUT_PATH = "你的文件.csv.gz"
OUTPUT_PATH = "sample.csv"

with gzip.open(INPUT_PATH, "rt", encoding="utf-8") as f_in, open(OUTPUT_PATH, "w", encoding="utf-8") as f_out:
    for idx, line in enumerate(f_in):
        if idx >= LINE_COUNT:
            break
        f_out.write(line)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:12:02