【问题标题】:Read the data of CSV file inside Zip File without extracting the contents in Matlab读取 Zip 文件中 CSV 文件的数据,无需在 Matlab 中提取内容
【发布时间】:2019-03-19 00:41:03
【问题描述】:

我有多个 Zip 文件 {'File1.zip', 'File2.zip', 'File3.zip',..., 'FileN.zip'},其中每个 zip 文件都包含一个 Data.csv 文件。我想读取每个 Zip 文件的 'Data.csv' 中的数据,而不必提取 Zip 文件的内容。这可能吗..?

【问题讨论】:

  • 你可以用unzip命令解压文件,读取它,如果你不想要它,以后删除它。
  • 我的想法不是提取或删除....是否可以使用actxserver应用程序或matlab中的java组件直接读取内容....
  • 这是一个想法。您应该编辑问题以包含这种可能的方法。

标签: matlab zip unzip


【解决方案1】:

当然Winzip / 7zip / Winrar没有COM接口组件,不像word那样可以直接调用,胜过其他应用程序。

因此@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 将其视为目录

  file = cellfun(@(x) fullfile('.',x),file,'UniformOutput',false);

% 现在对文件进行任何操作。

【讨论】:

  • 这可能与 java 版本有关,但我必须使用 while entries.hasMoreElements 而不是 while entries.hasNext 才能使其工作。否则很好的把戏。使用后不要忘记关闭 java zipfile (zipFile.close),否则它将被锁定,直到您关闭 Matlab。
猜你喜欢
  • 1970-01-01
  • 2013-03-18
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多