我想使用textscan函数在Matlab中扫描文本文件的文本。在我用fid = fopen('C:\ path')打开文本文件之前,我需要先解压缩文件。这些文件的扩展名为:* .gz
我需要分析数千个文件,高性能非常重要。
我有两个想法: (1)使用外部程序,在Matlab中从命令行调用它 (2)使用Matlab'zip'工具箱。我听说过gunzip,但不知道它的表现。
有没有人知道如何在Matlab中尽快解压缩这些文件?
谢谢!
答案 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 ]);