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

如何阻止easycsv::fread_zip自动保存解压文件?求替代方案

解决easycsv::fread_zip自动存文件到根目录的问题

方法一:给fread_zip指定临时解压目录

easycsv::fread_zip的源码里其实藏了个未在文档说明的exdir参数,用来指定解压路径。你可以把文件解压到系统临时目录,读完后清理,不会污染项目根目录:

require(easycsv)
require(data.table)

# 创建临时目录(系统会自动回收,也可手动删除)
temp_dir <- tempdir()

filezip <- system.file("exampleZips", "example_tables.zip", package="easycsv")
# 指定解压到临时目录,读取数据
df <- fread_zip(filezip, exdir = temp_dir)

# 手动清理临时目录里的解压文件(可选)
unlink(file.path(temp_dir, list.files(temp_dir)), recursive = TRUE)

方法二:放弃easycsv,用原生工具更可控

直接用data.table::fread结合utils::unzip,完全不用把文件写到磁盘,直接在内存读取:

处理单个zip文件

require(data.table)

filezip <- system.file("exampleZips", "example_tables.zip", package="easycsv")

# 获取zip内的所有文件列表,筛选txt文件
zip_file_list <- unzip(filezip, list = TRUE)$Name
txt_files <- grep("\\.txt$", zip_file_list, value = TRUE)

# 逐个读取并合并成一个数据表
all_data <- rbindlist(lapply(txt_files, function(file) {
  fread(unz(filezip, file))
}))

批量处理多个zip文件

如果要处理多个zip文件,用purrr批量循环:

require(data.table)
require(purrr)

# 替换成你的zip文件所在目录
zip_folder <- "path/to/your/zip/files"
# 获取所有zip文件的路径
all_zips <- list.files(zip_folder, pattern = "\\.zip$", full.names = TRUE)

# 遍历所有zip,读取其中的txt文件并合并
all_data <- map_dfr(all_zips, function(zip_path) {
  zip_file_list <- unzip(zip_path, list = TRUE)$Name
  txt_files <- grep("\\.txt$", zip_file_list, value = TRUE)
  
  rbindlist(lapply(txt_files, function(file) {
    fread(unz(zip_path, file))
  }))
})

特殊情况:需要临时解压再读取

如果遇到编码问题必须先解压,还是用临时目录:

require(data.table)

filezip <- system.file("exampleZips", "example_tables.zip", package="easycsv")
temp_dir <- tempdir()

# 解压到临时目录
unzip(filezip, exdir = temp_dir)

# 读取所有txt文件
txt_paths <- list.files(temp_dir, pattern = "\\.txt$", full.names = TRUE)
all_data <- rbindlist(lapply(txt_paths, fread))

# 删除临时文件
unlink(txt_paths)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:23:11