如何从压缩文件中读取多个文件?

Posted

技术标签:

【中文标题】如何从压缩文件中读取多个文件?【英文标题】:How to read multiples files from a compressed file? 【发布时间】:2015-08-20 08:55:27 【问题描述】:

我想知道如何从 R 中的压缩文件夹(“test2.zip”)中读取多个文件。

我编写了以下代码,该代码仅在压缩文件夹中只有一个文件时才有效。我需要知道如何从压缩文件夹中获取所有文件/倍数文件并使其在 R 中可读。 需要不同的 .CSV 文件作为数据框。

test5 <- read.csv(unzip("path/test2.zip", files = NULL, list = FALSE, 
                  overwrite = TRUE, junkpaths = FALSE, exdir = ".", 
                  unzip = "internal",setTimes = FALSE))

此外,当我尝试放入包含两个 .csv 文件的 zip 文件时,它会给出错误

文件中的错误(文件,“rt”):无效的“描述”参数

如何读取压缩文件中包含的所有csv文件?

【问题讨论】:

例如,lapply(unzip("path/test2.zip"), read.csv) 应该返回您的 csv 列表。 @lukeA 感谢 t2 您应该有单独的数据框 - 它们只是打包在一个列表中。例如,t2[[1]] 应该允许您访问该列表中的第一个数据框。想爆榜单,可以names(t2) &lt;- paste0("df", seq(t2)); list2env(t2, globalenv()) @lukeA 感谢您的快速回复。快速检查一下有没有办法让“df”的名称与 zip 文件中的名称相同?例如,如果 .zip 文件具有名为 test1 和 test2 的文件,并且在解压缩时它以相同的方式命名 datafame。 【参考方案1】:

这是一种方法。首先,为了演示目的,我压缩了 2 个示例文件:

write.csv(data.frame(x = 1:2, y = 1:2), tf1 <- tempfile(fileext = ".csv"))
write.csv(data.frame(x = 11:12, y = 11:12), tf2 <- tempfile(fileext = ".csv"))
zip(zipfile <- tempfile(fileext = ".zip"), files = c(tf1, tf2))

现在,解压...

fns <- unzip(zipfile, junkpaths = TRUE, exdir = tempdir())
list2env(setNames(lapply(fns, read.csv, row.names = 1), basename(tools::file_path_sans_ext(fns))), globalenv())

数据帧存储在变量中,这些变量由文件名命名。

【讨论】:

非常感谢。太好了!!

以上是关于如何从压缩文件中读取多个文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 zip 文件中读取数据而无需解压缩整个文件

如何从多个 tar 文件中解压缩特定文件并压缩它们?

Python:如何从压缩的 json .gz 文件中读取并写入 json 文件

从压缩文件夹中的文件夹中读取 txt 文件作为 pandas 数据框

如何用SAS读取压缩包内的文件或是自动解压文件

java - 如何从不同的文件夹压缩多个文件并使用java将压缩文件存储在一个文件夹中