我正在尝试在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)
但我仍然收到上面显示的警告信息。我已在计算机中安装了WinRAR
和7-Zip
。我使用的是最新版本的R(3.4.2 64位)以及最新版本的RStudio。我有一个Windows 7 x64操作系统。对此的任何帮助都将非常感激。
答案 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()