2007-11-06
用ruby压缩,解压缩zip文件
关键字: zip, unzip
项目中有一个小需求:
一个csv文件定期在服务器端更新,并用打包压缩成zip格式文件存储到一个固定位置,文件名固定
而我的任务是写一个脚本,定期取得这个文件,解压缩,并用得到的csv生成一个sqlite3数据库
需求很简单,在javaeye上搜到一个帖子关于如何压缩zip文件,以及递归目录下所有子目录的办法
帖子里面gigix回复用很简单的方法,启动一个外部进程,我一开始也才用这个办法:
不过后来需要把这个脚本放到另外一个服务器上,而那个服务器没有安装”unzip“,我又没有sudo权限
没有办法,只好回去用ruby的方法实现,麻烦一点,好处是跨平台,没有什么其他系统依赖
仅仅依赖一个gems:rubyzip
把代码留在这里做个记录,以备将来查找方便:
ZipFile的实例方法extract接受两个参数跟一个proc对象,第一个参数表示压缩包内的文件,第二个参数表示解压缩后另存文件名
proc对象返回true表示覆盖已存在文件按,返回false则不覆盖已存在文件。
一个csv文件定期在服务器端更新,并用打包压缩成zip格式文件存储到一个固定位置,文件名固定
而我的任务是写一个脚本,定期取得这个文件,解压缩,并用得到的csv生成一个sqlite3数据库
需求很简单,在javaeye上搜到一个帖子关于如何压缩zip文件,以及递归目录下所有子目录的办法
帖子里面gigix回复用很简单的方法,启动一个外部进程,我一开始也才用这个办法:
ruby 代码
- system("unzip -q -o #{ARGV[0]} somefile.csv")
不过后来需要把这个脚本放到另外一个服务器上,而那个服务器没有安装”unzip“,我又没有sudo权限
没有办法,只好回去用ruby的方法实现,麻烦一点,好处是跨平台,没有什么其他系统依赖
仅仅依赖一个gems:rubyzip
把代码留在这里做个记录,以备将来查找方便:
ruby 代码
- require "rubygems"
- # 这里gem用来检测系统是否安装”rubyzip“
- gem 'rubyzip'
- require 'zip/zip'
- Zip::ZipFile.open('down.zip') do |zipfile|
- zipfile.extract('somefile.csv', 'somefile.csv') {true}
- end
- 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
我遇到了,搞了好久搞不定,指教下。
http://iceskysl.1sters.com/?action=show&id=229
发表评论
- 浏览: 41832 次
- 性别:

- 来自: 上海

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
关于如何解决上SourceForg ...
mark
-- by insiku -
MacOSX: 安装MySQL和Post ...
买了MacBook拉?
-- by chenk85 -
MacOSX: 安装MySQL和Post ...
我个人偏向使用二进制预编译包,省事,不过我没有用过这个,想问一句,如果用http ...
-- by lgn21st -
关于如何解决上SourceForg ...
爬墙。。。。tor+无边。。。。强大~
-- by timedifier -
MacOSX: 安装MySQL和Post ...
直接用现成的安装包多省力阿... http://www.postgresqlf ...
-- by csr2000






评论排行榜