簡體   English   中英

在不存在的目錄中提取ZIP文件

[英]Extracting ZIP files in a directory that doesn't exist

我想從一個ZIP包中提取一個單一的內容類型文件到一個尚不存在的目錄中。 到目前為止,我的代碼:

  require 'zip'

  Dir.mkdir 'new_folder'
  #I create the folder

  def unzip_file (file_path, destination)
  Zip::File.open(file_path) { |zip_file| 
  zip_file.glob('*.xml'){ |f| #I want to extract .XML files only
      f_path = File.join(Preprocess, f.name) 
      FileUtils.mkdir_p(File.dirname(f_path)) 
      puts "Extract file to %s" % f_path
      zip_file.extract(f, f_path) 
  }
}
end

該文件夾已成功創建,但在任何目錄下均未提取。 我懷疑工作目錄內有問題。 有什么幫助嗎?

我相信您忘了先調用unzip方法...

不過,這就是我的處理方式:

require 'zip'

def unzip_file (file_path, destination)
  Zip::File.open(file_path) do |zip_file| 
    zip_file.each do |f| #I want to extract .XML files only
      next unless File.extname(f.name) == '.xml'
      FileUtils.mkdir_p(destination) 
      f_path = File.join(destination, File.basename(f.name)) 
      puts "Extract file to %s" % f_path
      zip_file.extract(f, f_path) 
    end
  end
end

zip_file = 'random.zip' # change this to zip file's name (full path or even relative path to zip file)
out_dir = 'new_folder' # change this to the name of the output folder
unzip_file(zip_file, out_dir) # this runs the above method, supplying the zip_file and the output directory

編輯

添加名為unzip_files的其他方法,該方法對目錄中所有壓縮文件都調用unzip_file

require 'zip'

def unzip_file (file_path, destination)
  Zip::File.open(file_path) do |zip_file| 
    zip_file.each do |f| #I want to extract .XML files only
      next unless File.extname(f.name) == '.xml'
      FileUtils.mkdir_p(destination)
      f_path = File.join(destination, File.basename(f.name)) 
      puts "Extract file to %s" % f_path
      zip_file.extract(f, f_path) 
    end
  end
end

def unzip_files(directory, destination)
  FileUtils.mkdir_p(destination)
  zipped_files = File.join(directory, '*.zip')
  Dir.glob(zipped_files).each do |zip_file|
    file_name = File.basename(zip_file, '.zip') # this is the zipped file name
    out_dir = File.join(destination, file_name)
    unzip_file(zip_file, out_dir)
  end
end

zipped_files_dir = 'zips' # this is the folder containing all the zip files
output_dir = 'output_dir' # this is the main output directory
unzip_files(zipped_files_dir, output_dir)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM