在函数中,在Matlab中解压缩文本文件的最快方法是什么?

时间:2010-02-19 09:49:59

标签: performance matlab text-files unzip gunzip

我想使用textscan函数在Matlab中扫描文本文件的文本。在我用fid = fopen('C:\ path')打开文本文件之前,我需要先解压缩文件。这些文件的扩展名为:* .gz

我需要分析数千个文件,高性能非常重要。

我有两个想法: (1)使用外部程序,在Matlab中从命令行调用它 (2)使用Matlab'zip'工具箱。我听说过gunzip,但不知道它的表现。

有没有人知道如何在Matlab中尽快解压缩这些文件?

谢谢!

3 个答案:

答案 0 :(得分:2)

您可以随时尝试使用Matlab解压缩()函数:

解压

提取zip文件的内容

语法

解压缩(zipfilename) 解压缩(zipfilename,outputdir) 解压缩(网址,...) filenames = unzip(...)

描述

unzip(zipfilename)将zipfilename的存档内容提取到当前文件夹中,并设置文件的属性,保留时间戳。如果现有文件的属性和所有权允许,它将覆盖与归档中名称相同的任何现有文件。例如,重新运行在同一个zip文件名上解压缩的文件不会覆盖任何具有只读属性的文件;相反,解压缩会发出此类文件的警告。

在内部,它使用Java的zip库org.apache.tools.zip。如果您的zip存档每个都包含许多文本文件,则可以更快地下载到Java并逐个条目地提取它们,而无需显式解压缩文件。查看unzip.m的源代码以获得一些想法,以及Java文档。

答案 1 :(得分:2)

我发现7zip-commandline(Windows) / p7zip(Unix)对此更加快速。

[编辑]从一些快速测试来看,似乎对gunzip进行系统调用比使用MATLAB的本机gunzip更快。你也可以尝试一下。

只需编写一个模仿基本MATLAB gunzip功能的新功能:

  

function [] = sunzip(fullfilename,output_dir)
  如果〜存在('output_dir','var'),则output_dir = fileparts(fullfilename);端

     

app_path ='/ usr / bin / 7za';
  开关='e'; %提取文件忽略目录结构
  options = [' - o'output_dir];

     

system([app_path开关选项'_'fullfilename]);

然后像使用gunzip一样使用它:

  

sunzip( '/数据/ time_1000.out.gz',TMP_DIR);

使用MATLAB的toc计时器,我获得了6个未压缩的114MB ASCII文件的以下提取时间:

gunzip:10.15s
sunzip:7.84s

答案 2 :(得分:1)

效果很好,只需要对Max调用可执行文件的语法进行微小更改。

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