如何在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
相关产品推荐
相关产品推荐

