如何从压缩文件中读取多个文件?
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) <- 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())
数据帧存储在变量中,这些变量由文件名命名。
【讨论】:
非常感谢。太好了!!以上是关于如何从压缩文件中读取多个文件?的主要内容,如果未能解决你的问题,请参考以下文章
Python:如何从压缩的 json .gz 文件中读取并写入 json 文件