如何导入位于 zip 中的文件之一内的给定 csv?

How to import a given csv located inside one of the files that are themselves inside a zip?

假设一个 zip“a0”包含 3 个文件“a01”、“a02”和“a03”。 使用 R,如何导入我们不知道它在哪个文件中的给定 csv(例如“ax.csv”)?

注意:假设这个给定的 csv 在整个 zip 中是唯一的,但可能有其他 csv 命名不同。

感谢帮助

使用unzip。第一行获取 zip 文件中文件的名称。然后我们grep出我们想要的文件。将模式更改为您要查找的任何内容。最后,第二个解压缩调用提取了 csv 文件,我们将其读入。没有使用包。

nms <- unzip("test.zip", list = TRUE)$Name
csv_name <- grep("csv$", nms, value = TRUE)
if (length(csv_name) != 1) stop("cannot determine which file to extract")
unzip("test.zip", files = csv_name)
read.csv(csv_name)

如果你能够使用 bash,你可以 unzip 在 R 之外, grepawk 文件路径,最后在 R read.csv .可能会快得多。

x <- system("unzip -c baz.zip | grep 'foo.csv' | awk '{print }'", int=TRUE)
read.csv(unzip('baz.zip', x))
#               X  mpg cyl disp
# 1     Mazda RX4 21.0   6  160
# 2 Mazda RX4 Wag 21.0   6  160
# 3    Datsun 710 22.8   4  108

数据

system('mkdir dir1 dir2')
write.csv(mtcars[1:3, 1:3], './dir2/foo.csv')
write.csv(NULL, './dir1/bar.csv')
system('zip -r baz.zip dir1 dir2')