Matlab函数中最快的文本文件解压方式是什么?

4
我想使用textscan函数在Matlab中扫描文本文件的文本。在我能够使用fid = fopen('C:\path')打开文本文件之前,我需要先解压缩文件。这些文件的扩展名为:*.gz
有成千上万个文件需要分析,高性能很重要。
我有两个想法: (1) 使用外部程序并从Matlab命令行调用它 (2) 使用Matlab的'zip'工具箱。我听说过gunzip,但不知道它的性能如何。
有人知道如何在Matlab内尽快地解压这些文件吗?
谢谢!

这个问题可能从未得到解答?你实际上是在寻求最快的解决方案,但却收到了一个没有涉及性能的“解决方案”。 - eMarine
3个回答

2

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

unzip

解压缩zip文件的内容

语法

unzip(zipfilename) unzip(zipfilename, outputdir) unzip(url, ...) filenames = unzip(...)

描述

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

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


2

我发现在这种情况下,7zip命令行(Windows) / p7zip(Unix)速度更快。

[编辑]从快速测试中,似乎通过调用系统来使用gunzip比使用MATLAB本机gunzip更快。你也可以尝试一下这个方法。

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

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

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

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

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

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

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

gunzip:10.15秒
sunzip:7.84秒


0

运行良好,只需对调用可执行文件的Max语法做出微小更改。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接