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

如何在R中无需解压直接读取Zip内所有CSV并合并为数据框?

R语言无需解压批量读取Zip压缩包内所有CSV并合并为数据框

核心思路

先获取Zip包内所有CSV文件的名称,再通过批量读取逻辑直接从压缩包内读取数据并合并成单个数据框,全程无需解压文件。

所需R包

需要加载readr(高效读取CSV)、purrr(批量处理函数)和stringr(筛选文件名):

library(readr)
library(purrr)
library(stringr)

本地Zip文件处理代码

如果Zip文件已保存在本地:

# 定义本地Zip文件路径
zip_file <- "myfile.zip"

# 提取Zip内所有CSV文件的名称
csv_files <- unzip(zip_file, list = TRUE)$Name %>%
  str_subset("\\.csv$")

# 批量读取并合并所有CSV
combined_df <- map_df(csv_files, ~read_csv(unz(zip_file, .x)))

远程大型Zip文件处理代码

针对你提到的美国2020财年合同数据这类大型远程Zip文件,建议先下载到临时文件(避免占用本地永久存储空间),再进行读取:

# 远程Zip文件地址
zip_url <- "https://files.usaspending.gov/award_data_archive/FY2020_All_Contracts_Full_20221008.zip"

# 创建临时文件存储下载的Zip
temp_zip <- tempfile(fileext = ".zip")
download.file(zip_url, temp_zip, mode = "wb")

# 提取临时Zip内的所有CSV文件名
csv_files <- unzip(temp_zip, list = TRUE)$Name %>%
  str_subset("\\.csv$")

# 批量读取并合并数据
combined_df <- map_df(csv_files, ~read_csv(unz(temp_zip, .x)))

# 可选:读取完成后删除临时Zip文件
file.remove(temp_zip)

优化提示

  • 对于超大型CSV,建议在read_csv中指定col_types参数(比如col_types = cols()),手动定义列数据类型,既能加快读取速度,也能避免自动类型推断时的内存浪费。
  • 如果Zip内的CSV文件列结构不一致,map_df会自动对齐缺失列,缺失值将填充为NA。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:50:42