[R] [Python] Memo zum Lesen mehrerer CSV-Dateien in mehreren Zip-Dateien

Einführung

Ich bin auf eine Szene gestoßen, in der ich mehrere CSV-Dateien lesen wollte, die in mehreren Zip-Dateien unter einem bestimmten Ordner gleichzeitig gespeichert waren, und habe mir eine Notiz gemacht.

Beispiel für die Ordnerkonfiguration

Wenn die Ordnerstruktur so ist, möchte ich die CSV-Dateien in jeder Zip-Datei gleichzeitig lesen und in der Liste speichern.

input/
    ┣ zip_files/
    ┃         ┣ test1.zip/
    ┃         ┃         ┣  test1_1.csv
    ┃         ┃         ┣  test1_2.csv
    ┃         ┃            ...
    ┃         ┣ test2.zip/
    ┃         ┃         ┣  test2_1.csv
    ┃         ┃         ┣  test2_2.csv
    ┃                      ...

R-Code

Sie können mit den Funktionen unzip und unz auf die darin enthaltenen Dateien zugreifen, ohne die Zip-Datei zu öffnen. Ich wollte es als Anhang von Python zur Liste hinzufügen, war mir aber nicht sicher, also habe ich unten einen Kompromiss geschlossen.

library(tidyverse)
library(data.table)

zip_list <- list.files("zip_files")

# function of read csv files in zip files 
get_csv <- function(zip_list){  
  
  csv_list <- list()
  zip_lists <- list()
  
  # Loop through the list of files
  for(j in 1:length(zip_list)) { 
    
    # Create list of files
    file <- unzip(paste0("zip_files/", zip_list[j]), list = TRUE) 
    
    for(i in 1:length(file)){
      # If a file is a csv file, unzip it and read the data
      if(grepl("csv", file[i,1])) {

        print(paste0('reading following file...', file[i,1]))
        csv_files <- read_csv(unz(paste0("zip_files/", zip_list[j]), file[i,1]), 
                              col_names=TRUE)
        ########################
        # Add Some process.
        ########################
        csv_list[[i]] <- csv_files
        zip_lists[[j]] <- csv_list
      }
    }
  }
  return(zip_lists)
}

system.time(csvs <- get_csv(zip_list))

Python-Code

Sie können auf das Innere zugreifen, ohne die Zip-Datei mit dem Zipfile-Modul zu entpacken. enumerate gibt den Index und das Element des Objekts zurück, das von der for-Anweisung gedreht werden soll. Dies ist praktisch, wenn Sie eine Verarbeitung hinzufügen. (Im folgenden Beispiel ist es dasselbe, auch wenn es nicht verwendet wird.)

import os
import zipfile
import glob
import pandas as pd
import time

df_list = list()
start = time.time()

for i, zips in enumerate(zip_list):
    zip_f = zipfile.ZipFile(zips)  
    file_list = zip_f.namelist() # file names of csv files in zip
    
    for j, files in enumerate(file_list):
        print('reading following file...' + zips + '/' + files)
        
        df = pd.read_csv(zip_f.open(files))
        ########################
        # Add Some process.
        # If use i and j too.
        ########################
        df_list.append(df)

elapsed_time = time.time() - start
print ("elapsed_time:{0}".format(elapsed_time) + "[sec]")

Recommended Posts

[R] [Python] Memo zum Lesen mehrerer CSV-Dateien in mehreren Zip-Dateien
Lesen von CSV-Dateien mit Pandas
Konvertieren Sie UTF-8-CSV-Dateien in Excel
2 Möglichkeiten, alle CSV-Dateien in einem Ordner zu lesen
Lesen von CSVs, die in Python nur Ganzzahlen enthalten
Verschieben von CSV-Dateien mit Python Teil 1
Lesen Sie Dateien parallel zu Python
Effektives Python-Memo Element 11 Verwenden Sie zip, um Iteratoren parallel zu verarbeiten
So machen Sie R chartr () in Python
Senden Sie mit Python (Python3) E-Mails an mehrere Empfänger.
Lesen Sie alle CSV-Dateien im Ordner
Lesen Sie Python csv und exportieren Sie es nach txt
Lesen und schreiben Sie JSON-Dateien mit Python
CSV in Python
Memo Nr. 4, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Lesen einer CSV-Datei mit Python 2/3
Konvertieren Sie die FBX-Datei in Python in ASCII <-> BINARY
Zusammenfassung zum Importieren von Dateien in Python 3
Memo Nr. 3, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Memo Nr. 1, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Lesen und Schreiben von CSV- und JSON-Dateien mit Python
Lesen Sie CSV-Dateien, die in Flask hochgeladen wurden, ohne sie zu speichern
Behandeln Sie Zip-Dateien mit japanischen Dateinamen in Python 3
Memo Nr. 2, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
So erhalten Sie die Dateien im Ordner [Python]
Memo Nr. 7, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Memo Nr. 6 für Python-Anfänger zum Lesen von "Detaillierte Erklärung der Python-Grammatik"
Memo Nr. 5, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Verschiedene Möglichkeiten, die letzte Zeile einer CSV-Datei in Python zu lesen
Lesen Sie DXF mit Python
Lesen Sie die Python-CSV-Datei
[Python] CSV-Dateien lesen
Konvertieren Sie das Bild in .zip mit Python in PDF
So laden Sie Dateien von Selenium of Python in Chrome herunter
So fügen Sie einer PDF-Datei Seitenzahlen hinzu (in Python)
[Python] Ein Memo zum vertikalen Schreiben von CSV mit Pandas
So rufen Sie mehrere Arrays mit Slice in Python ab.
Ich möchte R-Datensatz mit Python verwenden
Entfernen Sie Überschriften aus CSV-Dateien mit mehreren Formaten mit Python
Übergeben Sie Datenrahmen mit True / False von Python im CSV-Format an R (pd.DataFrame-> tbl_df).
Lesen Sie CSV mit Python-Pandas
So löschen Sie stdout in Python
Melden Sie sich auf der Website in Python an
Lesen Sie Eulers Formel in Python
Eine einfache Möglichkeit, mehrere for-Schleifen in Python zu vermeiden
So definieren Sie mehrere Variablen in einer Python for-Anweisung
Tipps zum Codieren kurz und einfach in Python zu lesen
Lesen Sie XML mit dem in Python angegebenen Namespace
So entwickeln Sie in einer virtuellen Python-Umgebung [Memo]
Lesen Sie Outlook-E-Mails mit Python
Batch-Konvertierung aller XLSX-Dateien im Ordner in CSV-Dateien
Erlauben Sie Python, die Zeichenfolge der Eingabedatei aus dem Ordner auszuwählen
Sprechen mit Python [Text zu Sprache]
Schreiben Sie mit Python in csv
Entpacke mehrere komprimierte Dateien (Python)
Vermeiden Sie mehrere Schleifen in Python
[Python] Verwenden Sie diese Option, um WAV-Dateien zu lesen und zu schreiben. [WAVIO]
Wie man in Python entwickelt
Hochladen mehrerer Dateien mit Flask