Próbuję zautomatyzować ekstrakcję wielu plików skompresowanych za pomocą 7-zip. Muszę zautomatyzować ten proces, ponieważ: a) mam wiele lat danych, które chciałbym odblokować; b) Chciałbym udostępnić mój kod innym osobom i zapobiec ich ręcznemu powtarzaniu.jak programowo wyodrębnić lub rozpakować plik .7z (7-zip) za pomocą R
Mam zarówno WinRAR, jak i 7-zip zainstalowany na moim komputerze, i mogę samodzielnie otworzyć te pliki z dowolnym programem.
Rozejrzałem się po poleceniach unzip
untar
i unz
, ale nie wierzę, by któryś z nich zrobił to, czego potrzebuję.
Nie wiem nic na temat kompresji wiem, ale jeśli to robi jakąś różnicę: każdy z tych plików zawiera tylko jedenplik i to tylko plik tekstowy.
Zdecydowanie wolę rozwiązanie, które nie wymaga od użytkownika instalowania dodatkowego oprogramowania (takiego jak WinRAR lub 7-Zip) i wykonywania polecenia za pomocą shell
, chociaż zdaję sobie sprawę, że to zadanie może być niemożliwe tylko w przypadku pakietów R i CRAN. Wierzę, że uruchamianie na tych plikach shell.exec
z dodatkowymi parametrami może działać na komputerach z zainstalowanym WinRAR, ale znowu, chciałbym uniknąć tej instalacji, jeśli to możliwe. :)
Uruchomienie poniższego kodu spowoduje wczytanie plików, które próbuję wyodrębnić - pliki .7z w files.data
są tym, co należy odblokować.
# create a temporary file and temporary directory, download the file, extract the file to the temporary directory
tf <- tempfile() ; td <- tempdir()
file.path <- "ftp://ftp.ibge.gov.br/Orcamentos_Familiares/Pesquisa_de_Orcamentos_Familiares_2008_2009/Microdados/Dados.zip"
download.file(file.path , tf , mode = "wb")
files.data <- unzip(tf , exdir = td)
# how do i unzip ANY of these .7z files?
files.data
Dzięki! :)
Najlepszym rozwiązaniem byłoby to pakiet, który może odczytywać i zapisywać pliki 7z przy użyciu standardowego API połączenia lub za pośrednictwem plików tymczasowych na dysku. Ale nie sądzę, że pakiet istnieje. – hadley
uzgodnione. teraz składam petycję do brazylijskiego spisu ludności, aby śledzić rady @ dirk i ponownie publikować pliki w standardowym formacie :) dzięki hadley! –
Przykładem twojego pokazu jest plik skompresowany pkzip, a nie skompresowany plik p7. Więc twoje standardowe 'unzip()' zadziała. Powiązane pytanie to http://stackoverflow.com/questions/31146263/sys-glob-within-unzip –