[RAILS] Wenn Sie mit Ruby eine Zip-Datei erstellen möchten, ist dies Rubyzip.

Überblick

Ich musste viele Zip-Dateien für eine bestimmte Aufgabe erstellen, wurde aber durch die Begegnung mit diesem Juwel gerettet. In diesem Artikel werden vier Möglichkeiten zum Arbeiten mit Zip-Dateien mit Ruby vorgestellt.

Ruby-Version

Ruby 2.4 oder höher

Installieren Sie gem

Gemfile hinzufügen

Gemfile


gem 'rubyzip'

Führen Sie den folgenden Befehl im Terminal aus

terminal


bundle install

Für 4 Zwecke richtig verwenden

1. Erstellen Sie eine Zip-Datei

Zip::OutputStream.open('example.zip') do |zos|
  zos.put_next_entry('first_file.txt')
  zos.puts 'hoge hoge'

  zos.put_next_entry('second_file.txt')
  zos.puts 'hoge again'
end

Verwenden Sie eine Zeichenfolge oder die von der Datei gelesenen Daten als Argument für die Puts-Methode. Der Inhalt der generierten Zip-Datei hat die folgende Struktur.

example.zip
- first_file.txt
- second_file.txt

Der Inhalt jeder Datei ist wie folgt.

first_file.txt


hoge hoge

second_file.txt


hoge again

2. Lesen Sie die Zip-Datei

Die Methode "get_next_entry" legt die Dateien in der Zip-Datei nacheinander fest.

Zip::InputStream.open('example.zip') do |zis|
  entry = zis.get_next_entry
  print "First line of '#{entry.name} (#{entry.size} bytes):  "
  puts "'#{zis.gets.chomp}'"
  entry = zis.get_next_entry
  print "First line of '#{entry.name} (#{entry.size} bytes):  "
  puts "'#{zis.gets.chomp}'"
end

Wenn Sie die von ** 1 ** generierte example.zip lesen, sehen Sie Folgendes.

terminal


First line of 'first_file.txt (10 bytes):  hoge hoge
First line of 'second_file.txt (11 bytes):  hoge again

3. Lesen Sie das ZIP-Dateiverzeichnis

Verwenden Sie die Methode "get_input_stream (entry)", um den "InputStream" für jeden Eintrag abzurufen.

zf = Zip::File.new('example.zip')
zf.each_with_index do |entry, index|
  puts "entry #{index} is #{entry.name}, size = #{entry.size}, compressed size = #{entry.compressed_size}"
end

Dieser Quellcode zeigt den "Index", "Namen", "Größe", "komprimierte Größe" der komprimierten Datei in der Zip-Datei an.

Wenn Sie die von ** 1 ** generierte example.zip lesen, sehen Sie Folgendes.

terminal


entry 0 is first_file.txt, size = 10, compressed size = 10
entry 1 is second_file.txt, size = 11, compressed size = 13

4. Ändern Sie die Zip-Datei

Ändern Sie die Zip-Datei direkt

Fügen Sie die durch den Pfad angegebene Datei mit "add (Eintrag, Pfad)" hinzu Umbenennen mit umbenennen (Eintrag, neuer_Name)

Ändern Sie die von ** 1 ** generierte Datei

Zip::File.open('example.zip') do |zip_file|
  zip_file.add('third_file.txt', 'third_file.txt')
  zip_file.rename('first_file.txt', 'first_file_rename.txt')
  zip_file.add('fourth_file.txt', 'fourth_file.txt')
end

Die folgenden Dateien wurden zusätzlich vorbereitet.

third_file


hoge third

fourth_file


hogehoge fourth

Ich werde es versuchen. Informationen erhalten Sie mit ** 3 **

terminal


entry 0 is second_file.txt, size = 11, compressed size = 13
entry 1 is third_file.txt, size = 10, compressed size = 12
entry 2 is first_file_rename.txt, size = 10, compressed size = 10
entry 3 is fourth_file.txt, size = 14, compressed size = 14

Die generierte Zip-Datei wurde in die folgende Struktur geändert:

example.zip
- second_file_txt
- third_file.txt
- first_file_rename.txt
- fourth_file.txt

Zusammenfassung

In diesem Artikel wurden vier Möglichkeiten zum Arbeiten mit Zip-Dateien vorgestellt. Es gibt andere nützliche Methoden in rubyzip, daher wird empfohlen, einen Blick darauf zu werfen.

Referenz

https://github.com/rubyzip/rubyzip

Recommended Posts

Wenn Sie mit Ruby eine Zip-Datei erstellen möchten, ist dies Rubyzip.
Ich möchte eine bestimmte Datei mit WatchService überwachen
Wenn Sie Mockito mit Kotlin verwenden möchten, verwenden Sie Mockito-Kotlin
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Ruby mit AtCoder lernen 13 So erstellen Sie ein zweidimensionales Array
Ich möchte eine Parkettdatei auch in Ruby erstellen
Wenn Sie eine Java-Anwendung in ein Docker-Image verwandeln möchten, ist es praktisch, Jib zu verwenden.
Machen Sie ein Tippspiel mit Ruby
So erstellen Sie ein Glas mit dem alten Hadoop (hadoop-core-0.20.2-cdh3u6) in Gradle: (Was tun, wenn Sie ZIP nicht erweitern können?)
Ich möchte mit link_to [Hinweis] eine Schaltfläche mit einem Zeilenumbruch erstellen.
Ich möchte eine Browsing-Funktion mit Ruby on Rails hinzufügen
So erstellen Sie eine JAR-Datei ohne Abhängigkeiten in Maven
Versuchen Sie, mit JRuby eine plattformübergreifende Anwendung zu erstellen (Generierung von JAR-Dateien).
Wenn Sie es wagen, Integer mit "==" zu vergleichen ...
Ich möchte eine Datei mit Ruby im Internet herunterladen und lokal speichern (mit Vorsicht).
Die Geschichte, dass der Umgang mit alten Daten ärgerlich ist
Wenn Sie Datenbankspalten usw. ändern möchten.
Ich möchte in der Lage sein, Dateien mit refile mit administrate [rails6] zu lesen.
[Ruby] Ich möchte einen Methodensprung machen!
[Rubiy] Ich möchte mit der Split-Methode ein Array aus einer Zeichenfolge erstellen. Und umgekehrt.
[Ruby] Wenn Sie mehrere Zeichen ersetzen möchten
Wenn Sie SQLite mit VSCode verwenden, verwenden Sie die Erweiterung (wie die Binärdatei von sqlite3 angezeigt wird)
Wenn Sie die Spring Boot + Thymeleaf-Verarbeitung trennen möchten
So erstellen Sie eine mit Ruby erstellte LINE-Messaging-Funktion
Machen wir einen LINE Bot mit Ruby + Sinatra - Teil 2
Was tun, wenn Sie versehentlich ein Modell erstellen?
Machen wir einen LINE Bot mit Ruby + Sinatra - Teil 1
Wenn in Ruby Hash [: a] [: b] [: c] = 0 ist, möchten wir, dass Sie rekursiv erweitern, auch wenn der Schlüssel nicht vorhanden ist
[Ruby + Rails] Wenn Sie sich zusammen mit der Benutzerregistrierung in der Mailchimp-Mailingliste registrieren möchten
Was tun, wenn Sie Ruby mit rbenv installiert haben, die Version sich jedoch nicht ändert?
So fordern Sie mit jMeter eine CSV-Datei als JSON an
[Ruby] So teilen Sie jede GraphQL-Abfrage in Dateien auf
Was tun, wenn in GlassFish eine java.io.IOException auftritt?
[Anfänger] Versuchen Sie, mit Java ein einfaches RPG-Spiel zu erstellen ①
Wenn Sie Programmieren an der Universität studieren möchten, gehen Sie nach Australien
[# 3 Java] Lesen Sie dies, wenn Sie Java lernen möchten! ~ Sorgfältig ausgewählt ~
Ich möchte ein bestimmtes Modell von ActiveRecord ReadOnly erstellen
[Einfach] So formatieren Sie Ruby erb-Dateien automatisch mit vsCode
Wenn Sie explizit ODER oder UND mit Ransack schreiben möchten
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
docker-compose.yml, wenn Sie MySQL auf Docker laufen lassen möchten
lombok.config, wenn Sie @Qualifier mit lombok an @RequiredArgsConstructor übergeben möchten
Es ist keine große Sache, wenn Sie verstehen, dass ich süchtig danach war, E-Mails mit Java Mail von Exchange Online zu empfangen
[Swift] Wenn Sie wissen möchten, ob die Anzahl der Zeichen in String mit einer bestimmten Anzahl übereinstimmt ...
Wenn Sie Rails noch nicht kennen und Ihre eigene Validierung vornehmen möchten, halten Sie an diesem Finger an.
Wenn Sie eine Methode in RSpec verspotten möchten, sollten Sie die Methode allow für mock und die Singleton-Methode verwenden.
Wenn ich ein Gem mit C-Erweiterung in Ruby installiere, möchte ich es schnell mit mehreren CPU-Kernen wie make -j4 fertigstellen
[Ruby] Problem mit der if-Anweisung
Was tun, wenn in Docker ein gcc-Fehler auftritt?
Ich möchte die Generierung / Öffnung einer Protokolldatei mit log4j # FileAppender verknüpfen