2007-11-06

用ruby压缩,解压缩zip文件

关键字: zip, unzip
项目中有一个小需求:
一个csv文件定期在服务器端更新,并用打包压缩成zip格式文件存储到一个固定位置,文件名固定
而我的任务是写一个脚本,定期取得这个文件,解压缩,并用得到的csv生成一个sqlite3数据库

需求很简单,在javaeye上搜到一个帖子关于如何压缩zip文件,以及递归目录下所有子目录的办法
帖子里面gigix回复用很简单的方法,启动一个外部进程,我一开始也才用这个办法:
ruby 代码
 
  1. system("unzip -q -o #{ARGV[0]} somefile.csv")  

不过后来需要把这个脚本放到另外一个服务器上,而那个服务器没有安装”unzip“,我又没有sudo权限
没有办法,只好回去用ruby的方法实现,麻烦一点,好处是跨平台,没有什么其他系统依赖
仅仅依赖一个gems:rubyzip

把代码留在这里做个记录,以备将来查找方便:
ruby 代码
 
  1. require "rubygems"  
  2. # 这里gem用来检测系统是否安装”rubyzip“  
  3. gem 'rubyzip'  
  4. require 'zip/zip'  
  5.   
  6. Zip::ZipFile.open('down.zip') do |zipfile|  
  7.   zipfile.extract('somefile.csv', 'somefile.csv') {true}  
  8. end  
  9.   
  10. csv = open(‘somefile.csv').read  

ZipFile的实例方法extract接受两个参数跟一个proc对象,第一个参数表示压缩包内的文件,第二个参数表示解压缩后另存文件名
proc对象返回true表示覆盖已存在文件按,返回false则不覆盖已存在文件。
评论
lgn21st 2008-03-17
没有尝试过把csv打包放到windows下面,但是我经常收到同事mail给我win平台上的excel文件,教我import到系统里面去,我将excel转csv处理.同理,能否尝试将csv转excel传到win平台上去呢?
iceskysl 2008-03-15
有没有遇到过在linix下运行导出的CSV,打包传给windows文件名和内容都变成乱码的了?

我遇到了,搞了好久搞不定,指教下。
http://iceskysl.1sters.com/?action=show&id=229
发表评论

您还没有登录,请登录后发表评论

lgn21st
搜索本博客
存档
最新评论