GIS数据处理-IDL调用7-zip自动解压压缩文件

本文目录
  • 正文

在之前的文章IDL直接读取QuikScat 压缩gz文件中,提到了IDL可以通过一个/COMPRESS参数来直接读取压缩文件。如下:

OPENR , LUN , filename , /COMPRESS,/GET_LUN

但是这仅仅适用于二进制的文件,在实际应用中常用的netcdf (也就是所谓的nc文件)经常也是压缩传输的,如果要读取这些压缩文件就必须先把netcdf文件解压出来,然后进行处理。我们考虑以下的一种应用情形,我们的数据的是动态变化的,也就是说不断增加的,这时候靠人工的手动解压就有点无为力了,所以我们需要在IDL中直接解压。下面是我探索的一种方法:

首先方法的思路借鉴这篇文章:IDL调用cmd命令,也就是说靠在IDL中通过spawn命令调用windows自带的命令行来解压相应的压缩文件。具体配置过程如下:

安装7-zip

7-Zip 是一款 开源 软件。大多数源代码都基于 GNU LGPL 许可协议下发布。功能强大,支持众多的压缩格式,对于常见的bz2、tar、gz完全可以胜任,另外其7z格式是目前公认的压缩率最高的压缩格式。你可以猛击这里下载,现在最新的版本也是10年的版本,但是功能稳定强大,一个优秀的软件何必天天更新~下载之后一路下一步即可。

配置环境变量

如果需要用命令行调用7-zip进行解压的话,需要配置7-zip的环境变量。配置方法如下:

  1. 找到7-zip的安装目录(默认的是C:\Program Files\7-Zip),复制这个路径。
  2. 我的电脑(win7是计算机)上右键,选择”属性“,然后选择高级系统设置,如图:

然后在系统变量里面找到Path,然后将7-zip的安装路径粘贴上去就好,如图,注意路径直接用分号隔开。

测试环境是否配置成功

运行cmd,在里面输入7z,然后回车,出现下面的界面表示配置成功了!

IDL调用7-zip

在此之前,你可能需要简单的了解下7z命令行解压的命令格式,详细的你可以参照这里。这里做一个简单的示例,代码如下:

PRO tscod
spawn,'7z e D:\sssss.bz2 -oD:\',/hide
END

上面这个命令是把D:\sssss.bz2 文件解压到D:\,参数 e 表示解压。

结语

综合来说上面的方法可以解决我的需求,不过目前发现7-zip的解压效率并不是很高,速度上稍微有那么一点慢,不过可以接受,另外rar也支持命令行模式,但是支持的格式不多,比如bz2格式就无法用命令行的方式来解压。

如您有疑问,可在文末留言,或到QQ群提问。

本站QQ群:291616564 麻辣GIS

微信公众号:malagis,扫描右边二维码直接关注。

微信捐助麻辣GIS 支付宝捐助麻辣GIS

如果本文对您有所帮助,欢迎对我们团队进行打赏捐助,让我们在传播3S的路上可以走得更远。


作者:,GIS爱好者。
分享本文,请您带上本文链接

已有 7 条评论

  1. 恩恩
    1#
    恩恩  · 2017-11-07 19:37

    您好,我按照以上方法操作,dos下输入7z e D:\sssss.bz2 -oD:\ 可以实现,但是idl中spawn,调用这个命令就无法实现,请问是什么原因?

      1. 恩恩
        恩恩  · 2017-11-07 19:38

        打错了 是cmd运行那个命令是可以实现,但spawn就不行

          1. Sailor
            Sailor  · 2017-11-07 21:18

            有什么报错么?你把/hide 这个参数取消看看

              1. 恩恩
                恩恩  · 2017-11-07 21:21

                没有报错,取消hire也不能实现

          2. Sailor
            Sailor  · 2017-11-07 22:04

            把你的spawn语句发一下?

  2. 恩恩
    2#
    恩恩  · 2017-11-07 22:11

    spawn,'7z e '+path+finame[i]+' -o'+path
    我试了spawn,'del '+path+finame[i]可以的。但就是7z不行。

      1. Sailor
        Sailor  · 2017-11-08 09:02

        '7z e '+path+finame[i]+' -o'+path 这个执行出来的路径能保证完全正确么?可以print出来,然后复制到cmd看看,如果cmd能行,spawn应该也没问题,你仔细看中路径中有没有空格和中文。

发表评论