4

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

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

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

有谁知道如何从 Matlab 中尽快解压缩这些文件?

谢谢!

4

3 回答 3

2

您可以随时尝试使用 Matlab unzip() 函数:

解压

提取zip文件的内容

句法

解压缩(zipfilename)解压缩(zipfilename,输出目录)解压缩(url,...)文件名=解压缩(...)

描述

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

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

于 2010-02-19T11:05:20.630 回答
2

我发现7zip-commandline(Windows) / p7zip(Unix) 会更快一些。

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

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

function [] = sunzip(fullfilename,output_dir)
if ~exist('output_dir','var'), output_dir = fileparts(fullfilename); 结尾

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

system([app_path 切换选项 '_' fullfilename]);

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

sunzip('/data/time_1000.out.gz',tmp_dir);

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

gunzip:10.15s
sunzip:7.84s

于 2010-04-16T11:53:48.933 回答
1

运行良好,只需要对 Max 调用可执行文件的语法稍作改动。

system([app_path switches ' ' fullfilename options ]);
于 2014-03-28T18:19:34.047 回答