2017-11-18 1 views
1

Ich versuche mehrere CSV-Dateien in R zu zippen. Unten ist der Code als Referenz.Wie zip mehrere CSV-Dateien in R?

# 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) 

Ich bekomme die folgende Warnmeldung. Die Zip-Datei wurde nicht erstellt.

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

Ich habe sogar versucht, diesen Befehl CSV-Dateinamen zu lesen: Zip_Files <- list.files(path = getwd(), pattern = ".csv$", full.names = TRUE) Aber ich immer noch die Warnmeldung oben gezeigt bekommen. Ich habe bereits WinRAR und 7-Zip in meinem Computer installiert. Ich benutze die neueste Version von R (3.4.2 64 Bit) zusammen mit der neuesten Version von RStudio. Ich habe ein Windows 7 x64 OS. Jede Hilfe dazu wäre sehr geschätzt.

+1

Wenn Sie sich die Hilfedatei '? Zip' anschauen, heißt es "Unter Windows ist der Standard auf ein ZIP-Programm angewiesen (zum Beispiel das von Rtools), das sich im Pfad befindet." Wahrscheinlich haben Sie kein Programm namens "zip" in Ihrem Pfad. Öffnen Sie eine Eingabeaufforderung und geben Sie "zip -h" ein. Erhalten Sie "nicht als interner oder externer Befehl erkannt"? – G5W

+0

Das ist richtig @ G5W. Ich öffnete gerade eine Eingabeaufforderung und tippte 'zip-h' wie vorgeschlagen. Ich bekomme "ZIP" wird nicht als interner oder externer Befehl, ausführbares Programm oder Batch-Datei erkannt. " –

+0

Haben Sie ein Programm auf Ihrem Computer zum Zip und entpacken von Dateien? – G5W

Antwort

2

Das Problem ist, dass Rs zip eigentlich keinen Code hat, um Dateien zu komprimieren (komprimieren). Dazu ruft es ein externes Programm auf. Sie müssen zip wissen, welches Programm zu verwenden ist und welche Argumente dieses Programm geben soll. Sie sollten diese Arbeit so zu machen in der Lage:

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

Wenn Ihr Weg zu 7Z, die Kommandozeilenversion von 7Zip, unterschiedlich ist, bitte passen Sie Ihre Installation anzupassen.

Einige Erklärung:

Das zip = "C:\\Program Files\\7-Zip\\7Z" Argument sagt R, welches Programm verwenden, um die Kompression auszuführen. In diesem Fall habe ich es auf 7Z, die Befehlszeilenversion von 7Zip, aber Sie können andere Command Line Programme verwenden, indem Sie dies auf ein anderes Programm zeigen.

Das flags = " a -tzip" Argument hängt von dem Programm ab, das Sie verwenden. Ich habe das für 7Z eingerichtet. Wenn Sie die 7Z documentation lesen, werden Sie feststellen, dass Sie 7Z einen Befehl (das "a") und Flags (das "-tzip") geben müssen. Der Befehl "a" bedeutet, dass diese Dateien dem Archiv hinzugefügt werden. Das -Zip-Flag bedeutet, dass es ein Zip-Archiv anstelle eines 7Z-Archivs ist. Mit anderen Programmen müssten Sie die Dokumentation lesen und entsprechende Flags für dieses Programm erstellen.

Update: Wenn Sie diese Funktionalität auf verschiedenen Kundenmaschinen werden müssen, sollten Sie die zip package erwägen Blick in die es kein externes Programm erfordert und bietet eine ähnliche Funktionalität.

+0

Vielen Dank, dass Sie sich die Zeit genommen haben, in diese @GSW zu schauen. Ich habe nur ein paar Fragen. Was macht 'flags =" a -tzip "? Und was wäre, wenn der Benutzer 'Winzip' oder' WinRAR' oder ein anderes Programm in seinem System installiert hätte? Wie ändere ich den Code entsprechend? –

+0

Ich werde Antwort auf die Antwort hinzufügen. – G5W

+0

Wirklich zu schätzen wissen. Ich werde diesen Vorschlag später testen und Sie auf dem Laufenden halten, wenn ich auf weitere Hindernisse stoße. –

1

können Sie das zip Paket installieren und in Ihrem Code verwenden. Auf diese Weise könnte jeder, der Ihren Code verwendet, die Dateien komprimieren, ohne zu installieren oder zu suchen, und dies für jedes Betriebssystem.

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) 
+0

Danke, das funktioniert @BenoitLondon! Ich versuche tatsächlich zu vermeiden, zusätzliche Pakete zu installieren, um mein Programm aus verschiedenen Gründen auszuführen. Für etwas so mächtig wie R, es ein wenig überraschend R unterstützt Datei-Dekomprimierung mit 'unzip()', hat aber keine Unterstützung für Dateikomprimierung eingebaut! –