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

如何在R中用fwrite生成bzip2压缩CSV,或先存CSV再转压缩?

关于用data.table::fwrite生成bzip2压缩CSV的解决方案

直接用fwrite生成bzip2的可能性

data.table的fwrite目前不支持直接输出bzip2压缩格式,它原生仅支持gzip和zip压缩(通过compression参数指定),因此直接写入.csv.bzip2后缀的文件不会触发压缩,只会生成普通CSV。

替代方案:先存普通CSV再压缩

利用fwrite的高速写入能力先保存未压缩CSV,再通过两种方式转为bzip2格式:

方法1:使用R内置工具压缩

library(data.table)

# 生成测试数据
df <- data.frame(A = rnorm(100000), B = rnorm(100000), C = rnorm(100000))

# 用fwrite快速保存未压缩CSV
fwrite(df, "temp_uncompressed.csv")

# 通过文件连接将普通CSV转为bzip2压缩格式
input_con <- file("temp_uncompressed.csv", "r")
output_con <- bzfile("df.csv.bzip2", "w")
writeLines(readLines(input_con), output_con)

# 关闭连接并删除临时文件
close(input_con)
close(output_con)
file.remove("temp_uncompressed.csv")

方法2:调用系统bzip2命令(推荐,速度更快)

Linux/macOS默认自带bzip2命令,Windows需确保命令可用(如安装Git Bash或Rtools并添加到环境变量):

library(data.table)

# 生成测试数据并快速保存未压缩CSV
df <- data.frame(A = rnorm(100000), B = rnorm(100000), C = rnorm(100000))
fwrite(df, "temp_uncompressed.csv")

# 调用系统命令压缩,-f参数强制覆盖已有文件
system("bzip2 -f temp_uncompressed.csv")

# 按需重命名压缩后的文件(默认会生成temp_uncompressed.csv.bz2)
file.rename("temp_uncompressed.csv.bz2", "df.csv.bzip2")

这种方式结合了fwrite的写入速度优势和系统压缩工具的高效性,整体处理大文件的速度会远优于原生write.csv + bzfile的组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 02:45:40