2015-04-07 9 views
5

Was ist der beste Weg in R festzustellen, ob eine Datei komprimiert ist oder nicht? Gibt es eine bestimmte Funktion, um das zu überprüfen? Ich frage nach etwas anderem als nach Dateinamenerweiterung, z.Wie überprüft man, ob eine Datei komprimiert ist in R

grepl("^.*(.gz|.bz2|.tar|.zip|.tgz|.gzip|.7z)[[:space:]]*$", filename) 
+2

es im Allgemeinen nicht möglich ist, zu sagen, ob eine Datei komprimiert wird (oder überhaupt welches Format es in). Sie können nur nach bekannten Byte-Mustern am Anfang der Datei suchen, aber das ist nicht wirklich zuverlässiger als das Überprüfen der Dateierweiterung. –

+0

Warum willst du das in 'R' wissen? Was ist dein Endziel? –

+0

fread() aus dem Bioconductor-Paket data.table nimmt keine komprimierte Datei als Eingabe-Argument –

Antwort

2

Wenn Sie auf Linux (oder ähnlich) können Sie den file Befehl verwenden. Z.B.

file filename 

Diese finden Sie nützliche Informationen über eine ganze Reihe von Formaten erzählen, einschließlich zum Beispiel, wenn die Datei mit gzip komprimiert wird (eine der Formate R direkt lesen können).

+3

In R wäre dies 'system (" datei dateiname ")' – Thomas

1

Wenn Sie Java installiert haben, können Sie das kostenlose Tool verwenden, um die Metadaten einer Datei zu untersuchen.

-Setup nach dem Download:

alias tika='java -jar /opt/java_shared/tika/tika-app-1.7.jar' 

eine Datei analysieren (langsam, dauert ~ 5 Sekunden)

tika -m chroma-1.15.tar.bz2 

Content-Length: 2690725 
Content-Type: application/x-bzip2 
X-Parsed-By: org.apache.tika.parser.DefaultParser 
X-Parsed-By: org.apache.tika.parser.pkg.CompressorParser 
resourceName: chroma-1.15.tar.bz2 

Ein weiteres Beispiel:

echo "hi there" > notazipfile.zip 

tika -m notazipfile.zip 

Content-Encoding: ISO-8859-1 
Content-Length: 9 
Content-Type: text/plain; charset=ISO-8859-1 
X-Parsed-By: org.apache.tika.parser.DefaultParser 
X-Parsed-By: org.apache.tika.parser.txt.TXTParser 
resourceName: notazipfile.zip 

Es gibt eine Hilfeseite:

tika --help 

Lange Liste:

tika --list-supported-types | grep -C 3 bzip2 

application/x-bzip 
    supertype: application/octet-stream 
    parser: org.apache.tika.parser.pkg.CompressorParser 

Nochmal: Probing große Dateien kann eine Weile dauern.

Hinweis gibt es eine Website, wo jemand eine R-Schnittstelle, aber diese Web-Seite ist ab 2012 zu schaffen gestartet und scheint inaktiv zu sein: https://r-forge.r-project.org/projects/r-tika/

2

In R, dies zu tun:

filetype = summary(file('yourfile.gz'))$class 

Wenn es gzip ist, wird filetypegzfile


Hinweis sein: Sie auch Datei t möchten zuweisen o eine Variable, und schließen Sie die Verbindung nach

filetype <- function(path){ 
    f = file(path) 
    ext = summary(f)$class 
    close.connection(f) 
    ext 
} 
Verwandte Themen