how to make unzip faster in matlab?

29 visualizaciones (últimos 30 días)
sandy
sandy el 28 de Ag. de 2013
Respondida: Wouter el 7 de Ag. de 2017
i have 50000 .zip files..i need to unzip and process with the files inside those zip files. i coded to unzip in a loop.but its very slow and taked 2 hr to complete unzip of all 5000 files.any way to speedup the unzipping in matlab?

Respuestas (5)

Wouter
Wouter el 7 de Ag. de 2017
I had the same issue. Using an external program (7-zip) solved the issue for me. Extracting and repacking 1000+ zip files was > 27x faster than the Matlab unzip function.
Is used it like this to unpack:
sys_cmd_unzip = @(z,d) ['"C:\Program Files\7-Zip\7z.exe" e -y -r -o"' d '" "' z '" *'];
cellfun(@(z,d) system(sys_cmd_unzip(z,d)), all_zip_files, new_zip_file_dirs,'uniformoutput',false)
and like this to repack:
sys_cmd_unzip = @(zd) ['"C:\Program Files\7-Zip\7z.exe" a -y -sdel -tzip -r "' zd '.zip" "' zd '/*";'];
cellfun(@(zfd) system(sys_cmd_unzip(zfd)),new_zip_file_dirs,'uniformoutput',false)
cellfun(@(zfd) rmdir(zfd), new_zip_file_dirs) % remove directory where files where stored.
for the command line options of 7zip, see help of 7z.exe.

David Sanchez
David Sanchez el 28 de Ag. de 2013
You can use external software with " ! ", if you use unzip, then, call it this way:
! unzip your_file.zip
  1 comentario
sandy
sandy el 28 de Ag. de 2013
thanks... this is applicable for one zip file..but how to use this(!) for 5500 files in a loop..it showing error?

Iniciar sesión para comentar.


Walter Roberson
Walter Roberson el 28 de Ag. de 2013
Have you considered calling upon an external unzipping program by using system() ?
  1 comentario
sandy
sandy el 28 de Ag. de 2013
this s my code of unzipping for N number of files.(nearly 5500).it took 3hr to finish all process, how can i use system() to access external program..help me
zip_files=dir('*.zip');
for k=1:numel(zip_files)
unzip(zip_files(k).name,'output');
T ='.\Extracted Files.\*.tim';
R='.\Extracted Files.\*.run';
movefile(T,'.\T Files');
movefile(R,'.\R Files');
end

Iniciar sesión para comentar.


David Sanchez
David Sanchez el 28 de Ag. de 2013
You can try something like this:
my_zips = dir('*.zip');
for k=1:numel(my_zips)
tmp_str = horzcat('unzip ', my_zips(k).name);
system(tmp_str);
end
This will unzip all your zip files.
  2 comentarios
sandy
sandy el 29 de Ag. de 2013
his code takes more time to unzip all my files.can you suggest more specific way to reduce unzipping times for 55000 zip files
David Sanchez
David Sanchez el 29 de Ag. de 2013
Sometimes you can not reduce any more the time taken to perform some tasks. 5000 files are a whole lot of files to unzip. You say it takes 2 hours to perform the job, that means you are unzipping a file every 1.44 seconds, which is not a long time to unzip a file of small size.

Iniciar sesión para comentar.


Patrick Lloyd
Patrick Lloyd el 15 de Abr. de 2015
I understand the post is somewhat old but it may be useful for people looking to speed up their zip extraction. If you don't specifically need every single file in the archive at once, you can use something like:
zip_file = 'foo.zip'
destination_folder = 'C:\foo\bar\'
system(['unzip ' '"' zip_file '"' ' file_inside_to_extract.txt' ' -d ' '"' ...
destination_folder '"'])
The system unzip command (for Windows at least) allows you to pull out specific files from the archive.

Categorías

Más información sobre Programming en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by