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

如何在R中获取tempfile存储的压缩包内的文件名向量?

解决R中临时zip文件无法获取文件列表的问题

嘿,我懂你遇到的困扰了——tempfile()生成的是单个临时文件的路径,可不是文件夹,所以直接用list.files(temp)当然拿不到内容啦,这就像在问“一个文件里有哪些文件”,逻辑根本不对嘛。

给你两种实用解决方案,按需挑选就行:

方案1:解压到临时目录后读取(适合需要操作多个文件的场景)

先创建一个临时目录,把下载的zip包解压进去,再去目录里找目标文件:

# 先确保安装了stringr包(没装的话先跑下面这句)
# install.packages("stringr")

# 创建临时目录,用来存放解压后的文件
temp_dir <- tempdir()
# 生成临时文件路径,用来存储下载的zip包
temp_file <- tempfile()

# 下载目标zip文件
download.file("https://url/file.zip", destfile = temp_file)

# 将zip包解压到刚才创建的临时目录
unzip(temp_file, exdir = temp_dir)

# 现在就能获取到解压后的所有文件列表了,full.names=TRUE能直接拿到完整文件路径
files <- list.files(temp_dir, full.names = TRUE)

# 筛选出你需要的目标文件
target_file <- files[stringr::str_detect(files, "^file123.txt")]

# 读取数据到data.frame
data <- read.table(target_file, header = TRUE, sep = ";")

# 用完记得清理临时文件和目录
unlink(temp_file)
unlink(temp_dir, recursive = TRUE)

方案2:直接读取zip内的目标文件(更高效,无需解压整个包)

如果只需要读取zip里的单个文件,完全没必要解压整个包,用unzip()的list=TRUE参数先查看zip内的文件列表,再直接读取目标文件:

# 生成临时文件路径,存储下载的zip包
temp_file <- tempfile()
download.file("https://url/file.zip", destfile = temp_file)

# 直接查看zip包内的所有文件信息,不用实际解压
zip_file_info <- unzip(temp_file, list = TRUE)
# 从文件信息里筛选出目标文件名
target_filename <- zip_file_info$Name[stringr::str_detect(zip_file_info$Name, "^file123.txt")]

# 直接从zip包内读取目标文件,省了解压步骤
data <- read.table(unz(temp_file, target_filename), header = TRUE, sep = ";")

# 清理临时文件
unlink(temp_file)

这两种方法在你的R 3.6.0版本和Windows 7系统下都能正常运行,放心用就好~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:13:29