我想用 textscan 函数在 Matlab 中扫描文本文件的文本。在我可以使用 fid = fopen('C:\path') 打开文本文件之前,我需要先解压缩文件。文件具有扩展名:*.gz
我需要分析数千个文件,高性能很重要。
我有两个想法:(1)使用外部程序从 Matlab 中的命令行调用它(2)使用 Matlab 'zip'工具箱。我听说过gunzip,但不知道它的性能。
有谁知道如何从 Matlab 中尽快解压缩这些文件?
谢谢!
我想用 textscan 函数在 Matlab 中扫描文本文件的文本。在我可以使用 fid = fopen('C:\path') 打开文本文件之前,我需要先解压缩文件。文件具有扩展名:*.gz
我需要分析数千个文件,高性能很重要。
我有两个想法:(1)使用外部程序从 Matlab 中的命令行调用它(2)使用 Matlab 'zip'工具箱。我听说过gunzip,但不知道它的性能。
有谁知道如何从 Matlab 中尽快解压缩这些文件?
谢谢!
您可以随时尝试使用 Matlab unzip() 函数:
提取zip文件的内容
解压缩(zipfilename)解压缩(zipfilename,输出目录)解压缩(url,...)文件名=解压缩(...)
unzip(zipfilename) 将 zipfilename 的存档内容提取到当前文件夹并设置文件的属性,保留时间戳。如果现有文件的属性和所有权允许,它会覆盖与存档中同名的任何现有文件。例如,在相同 zip 文件名上重新运行 unzip 的文件不会覆盖任何具有只读属性的文件;相反, unzip 会针对此类文件发出警告。
在内部,它使用 Java 的 zip 库org.apache.tools.zip
。如果您的 zip 存档每个都包含许多文本文件,则下拉到 Java 中并逐项提取它们可能会更快,而无需显式解压缩文件。查看 unzip.m 的源代码以获得一些想法,以及 Java 文档。
我发现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
运行良好,只需要对 Max 调用可执行文件的语法稍作改动。
system([app_path switches ' ' fullfilename options ]);