Какой самый быстрый способ разархивировать текстовые файлы в Matlab во время функции? - PullRequest
4 голосов
/ 19 февраля 2010

Я хотел бы отсканировать текст текстовых файлов в Matlab с помощью функции textcan. Прежде чем я смогу открыть текстовый файл с помощью fid = fopen ('C: \ path'), мне нужно сначала разархивировать файлы. Файлы имеют расширение: * .gz

Существуют тысячи файлов, которые мне нужно проанализировать, и важна высокая производительность.

У меня есть две идеи: (1) Использовать внешнюю программу, вызывая ее из командной строки в Matlab (2) Используйте Matlab 'zip'toolbox. Я слышал о gunzip, но не знаю о его производительности.

Кто-нибудь знает способ как можно быстрее разархивировать эти файлы из Matlab?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 16 апреля 2010

Я нашел 7zip-командная строка (Windows) / p7zip (Unix), что несколько быстрее для этого.

[edit] После некоторого быстрого тестирования кажется, что системный вызов gunzip выполняется быстрее, чем при использовании родного gunzip MATLAB. Вы также можете попробовать.

Просто напишите новую функцию, которая имитирует базовую функциональность MATZAB gunzip:

function [] = sunzip (полное имя_файла, выходной_каталог)
если ~ существует ('output_dir', 'var'), output_dir = fileparts (полное имя файла); конец

app_path = '/ usr / bin / 7za';
переключатели = 'е'; % extract файлов игнорирует структуру каталогов
options = ['-o' output_dir];

system ([app_path переключает опции '_' fullfilename]);

Затем используйте его, как если бы вы использовали gunzip:

* * 1 022 sunzip ( '/ данных / time_1000.out.gz', tmp_dir);

С таймером MATLAB toc я получаю следующие времена извлечения с 6 несжатыми файлами ASCII 114 МБ:

gunzip: 10.15 с
Sunzip: 7,84 с

2 голосов
/ 19 февраля 2010

Вы всегда можете попробовать функцию Matlab unzip ():

распакуйте

Извлечение содержимого zip-файла

Синтаксис

распаковать (zipfilename) распаковать (zipfilename, outputdir) распаковать (URL, ...) filenames = unzip (...)

Описание

unzip (zipfilename) извлекает архивное содержимое zipfilename в текущую папку и устанавливает атрибуты файлов, сохраняя временные метки. Он перезаписывает любые существующие файлы с теми же именами, что и в архиве, если это позволяют атрибуты и права собственности существующих файлов. Например, файлы из повторного запуска распаковать по тому же имени файла zip не перезаписывают ни один из тех файлов, которые имеют атрибут только для чтения; вместо этого распаковка выдает предупреждение для таких файлов.

Внутренне это использует библиотеку zip Java org.apache.tools.zip. Если каждый из ваших zip-архивов содержит много текстовых файлов, может быть быстрее перейти в Java и извлечь их запись за записью без явно разархивированных файлов. посмотрите на источник unzip.m, чтобы получить некоторые идеи, а также документацию по Java.

1 голос
/ 28 марта 2014

работал хорошо, просто нужно было немного изменить синтаксис Макса, вызывая исполняемый файл.

system([app_path switches ' ' fullfilename options ]);
...