如何导入位于 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 之外, grep
和 awk
文件路径,最后在 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')
假设一个 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 之外, grep
和 awk
文件路径,最后在 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')