读取Zip文件中的CSV文件数据,无需在Matlab中提取内容
我有很多Zip文件读取Zip文件中的CSV文件数据,无需在Matlab中提取内容,matlab,zip,unzip,Matlab,Zip,Unzip,我有很多Zip文件{'File1.Zip','File2.Zip','File3.Zip',…,'FileN.Zip'},其中每个Zip文件都包含一个Data.csv文件。我想读取每个Zip文件的'data.csv'中的数据,而不必提取Zip文件的内容。这可能吗?当然Winzip/7zip/Winrar没有COM接口组件,可以直接调用,不像word、excel或其他应用程序 因此@Java是合适的 思想不是物理上提取文件,而是创建文件的绝对路径,使得Windows视为物理存在的文件(类似于~tM
{'File1.Zip','File2.Zip','File3.Zip',…,'FileN.Zip'}
,其中每个Zip文件都包含一个Data.csv
文件。我想读取每个Zip文件的'data.csv'
中的数据,而不必提取Zip文件的内容。这可能吗?当然Winzip/7zip/Winrar没有COM接口组件,可以直接调用,不像word、excel或其他应用程序
因此@Java是合适的
思想不是物理上提取文件,而是创建文件的绝对路径,使得Windows视为物理存在的文件(类似于~tMP文件)
这是密码zipFilename = 'Ex.zip';
zipJavaFile = java.io.File(zipFilename);
%创建一个Java ZipFile
zipFile = org.apache.tools.zip.ZipFile(zipJavaFile);
%从ZipFile中提取条目
entries = zipFile.getEntries;
cnt = 1;
%获取Zip文件路径
while entries.hasNext
tempObj = entries.nextElement;
file{cnt,1} = tempObj.getName.toCharArray';
cnt = cnt+ 1;
end
%提取文件名
ind = regexp(file,'$*.csv$');
ind = find(~cellfun(@isempty,ind)); % Find Non Empty Cell Index
file = file(ind);
%创建绝对路径,使Windows考虑为目录< /p>
file = cellfun(@(x) fullfile('.',x),file,'UniformOutput',false);
%现在操作文件上的任何东西。您可以使用
解压
命令提取文件,读取它,如果您不需要,可以稍后删除它。我的想法是不要提取或删除…而是使用actxserver应用程序或matlab中的java组件直接读取内容…这是一个想法。您应该编辑问题以包含此可能的方法。它可能与java版本有关,但我必须使用while entries.hasMoreElements
而不是while entries.hasNext
才能使其正常工作。否则这是个好把戏。不要忘记在使用后关闭java zipfile(zipfile.close
),否则它将被锁定,直到您关闭Matlab。