如何在R中压缩多个CSV文件?

时间:2017-11-18 20:25:45

标签: r csv dataframe zip zipfile

我正在尝试在R中压缩多个CSV文件。以下是供参考的代码。

# Create two dataframes using inbuilt datasets for reproducible code
df1 <- head(mtcars)
df2 <- head(iris)

# Write the files as CSV into working directory
write.csv(df1, file = "Test_File1.csv", row.names = FALSE, quote = FALSE)
write.csv(df2, file = "Test_File2.csv", row.names = FALSE, quote = FALSE)

# Read the 2 CSV file names from working directory
Zip_Files <- list.files(path = getwd(), pattern = ".csv$")

# Zip the files and place the zipped file in working directory
zip(zipfile = "TestZip", files = Zip_Files)

我收到以下警告信息。尚未创建Zip文件。

Warning message:
running command '"zip" -r9X "TestZip" "Test_File1.csv" "Test_File2.csv" ' had status 127

我甚至尝试过这个命令来读取CSV文件名:Zip_Files <- list.files(path = getwd(), pattern = ".csv$", full.names = TRUE)但我仍然收到上面显示的警告信息。我已在计算机中安装了WinRAR7-Zip。我使用的是最新版本的R(3.4.2 64位)以及最新版本的RStudio。我有一个Windows 7 x64操作系统。对此的任何帮助都将非常感激。

3 个答案:

答案 0 :(得分:4)

问题是R zip实际上没有压缩(压缩)文件的代码。它调用外部程序来做到这一点。您必须让zip知道要使用的程序以及为该程序提供的参数。你应该可以这样做:

zip(zipfile = "TestZip", files = Zip_Files, flags = " a -tzip",
    zip = "C:\\Program Files\\7-Zip\\7Z")

如果7Z的命令行版本7Z的路径不同,请调整以匹配您的安装。

一些解释:

zip = "C:\\Program Files\\7-Zip\\7Z"参数告诉R使用哪个程序执行压缩。在这种情况下,我将其指向7Z,命令行版本为7Zip,但您可以使用其他命令行程序,将其更改为指向其他程序。

flags = " a -tzip"参数取决于您使用的程序。我为7Z设置了这个。阅读7Z documentation,您将看到需要给7Z一个命令(“a”)和标志(“-tzip”)。 “a”命令意味着将这些文件添加到存档中。 -tzip标志表示将其设为zip存档而不是7Z存档。使用不同的程序,您需要阅读文档并为该程序构造适当的标志。

更新:如果您需要在不同的客户计算机上使用此功能,则应考虑查看zip package它不需要任何外部程序并提供类似功能。

答案 1 :(得分:2)

您可以安装zip包并在代码中使用它。这样,任何使用您的代码的人都可以压缩文件而无需安装或搜索配置,这适用于任何操作系统。

library(zip)

# Create two dataframes using inbuilt datasets for reproducible code
df1 <- head(mtcars)
df2 <- head(iris)

# Write the files as CSV into working directory
write.csv(df1, file = "Test_File1.csv", row.names = FALSE, quote = FALSE)
write.csv(df2, file = "Test_File2.csv", row.names = FALSE, quote = FALSE)

# Read the 2 CSV file names from working directory
Zip_Files <- list.files(path = getwd(), pattern = ".csv$")

# Zip the files and place the zipped file in working directory
zip::zip(zipfile = "TestZip", files = Zip_Files)

答案 2 :(得分:1)

已弃用zip库中的zip函数。如果要使用绝对路径压缩多个文件,则需要使用zipr。下面为我​​工作。

queue.popleft()