आर

2013-04-19 4 views
18

के साथ एक .7z (7-ज़िप) फ़ाइल प्रोग्रामेटिक रूप से निकालने या अनजिप करने के लिए मैं 7-ज़िप के साथ संपीड़ित कई फ़ाइलों के निष्कर्षण को स्वचालित करने की कोशिश कर रहा हूं। मुझे इस प्रक्रिया को स्वचालित करने की आवश्यकता है, क्योंकि ए) कई वर्षों के डेटा हैं जिन्हें मैं अनलॉक करना चाहता हूं और बी) मैं अपना कोड दूसरों के साथ साझा करना चाहता हूं और उन्हें प्रक्रिया को दोहराने से रोकना चाहता हूं।आर

मेरे पास मेरे कंप्यूटर पर WinRAR और 7-ज़िप दोनों स्थापित हैं, और मैं इन फ़ाइलों को आसानी से किसी भी प्रोग्राम के साथ खोल सकता हूं।

मैंने unzipuntar और unz आदेशों पर चारों ओर देखा है, लेकिन मुझे विश्वास नहीं है कि उनमें से कोई भी मुझे जो चाहिए वह करें।

मैं संपीड़न बारे में कुछ पता नहीं है, लेकिन अगर यह किसी भी फर्क नहीं पड़ता: इन फ़ाइलों में से प्रत्येक केवल एक फ़ाइल होता है और यह सिर्फ एक पाठ फ़ाइल है।

मैं दृढ़ता से है, हालांकि मैं स्वीकार करते हैं इस कार्य को केवल आर और क्रैन संकुल के साथ असंभव हो सकता है एक समाधान है कि (WinRAR या 7-पिन की तरह) अतिरिक्त सॉफ्टवेयर स्थापित करने और shell के साथ एक कमांड निष्पादित करने के लिए उपयोगकर्ता की आवश्यकता नहीं है पसंद करेंगे। मुझे वास्तव में विश्वास है कि shell.exec इन फ़ाइलों पर अतिरिक्त पैरामीटर के साथ WinRAR स्थापित कंप्यूटर पर काम कर सकता है, लेकिन फिर से, यदि संभव हो तो मैं उस इंस्टॉलेशन से बचना चाहूंगा। :)

नीचे दिए गए कोड को चलाने से मैं उन फ़ाइलों को लोड करूँगा जिन्हें मैं निकालने का प्रयास कर रहा हूं - files.data में .7z फ़ाइलों को अनलॉक करने की आवश्यकता है।

# 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 

धन्यवाद !!! :)

+0

सबसे अच्छा समाधान देखें एक पैकेज है कि पढ़ सकते हैं और या तो मानक कनेक्शन एपीआई या डिस्क पर अस्थायी फ़ाइलों के माध्यम से का उपयोग कर 7z फ़ाइलें लिख सकता है किया जाएगा। लेकिन मुझे नहीं लगता कि पैकेज मौजूद है। – hadley

+1

सहमत हुए। अब मैं ब्राजीलियाई जनगणना में लोगों को @ डार्क की सलाह का पालन करने और मानक प्रारूप के साथ फाइलों को दोबारा पोस्ट करने के लिए याचिका कर रहा हूं :) धन्यवाद हैडली! –

+0

आपका दिखाया गया उदाहरण एक pkzip compresse फ़ाइल है जो एक पी 7 संपीड़ित फ़ाइल नहीं है। तो आपका मानक 'unzip() 'काम करेगा। एक संबंधित प्रश्न http://stackoverflow.com/questions/31146263/sys-glob-within-unzip –

उत्तर

12

आप अपने रास्ते में 7z निष्पादन योग्य है, तो आप सरल उपयोग system आदेश

system('7z e -o <output_dir> <archive_name>')

+0

"मैं दृढ़ता से ऐसे समाधान को प्राथमिकता दूंगा जो उपयोगकर्ता को अतिरिक्त सॉफ़्टवेयर स्थापित करने की आवश्यकता नहीं है" की आवश्यकता को पूरी तरह याद करता है। –

+0

@DirkEddelbuettel लेकिन हाथ से सबकुछ करने से कम, यह एकमात्र चीज है जो काम करती है, है ना? :( –

+11

@DirkEddelbuettel .. जो आप और हैडली कह रहे हैं, यह _only_ उत्तर है। :(मैं धागे को क्यों हटा दूंगा? दूसरों को यह जानने से भी फायदा हो सकता है कि यह कार्य बाहरी सॉफ्टवेयर –

8

यह archive package साथ किया जा सकता कर सकते हैं।

library(archive) 
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") 
archive(tf) 

https://github.com/jimhester/archive

+0

अद्भुत। मैं तुरंत 7-ज़िप निर्भरताओं को डंप करना शुरू कर दूंगा। https://github.com/ अजमिको/lodown/मुद्दों/99 धन्यवाद –