[R] [Python] Memo pour lire plusieurs fichiers csv dans plusieurs fichiers zip

introduction

J'ai rencontré une scène où je voulais lire plusieurs fichiers csv stockés dans plusieurs fichiers zip sous un certain dossier à la fois, j'ai donc pris une note.

Exemple de configuration de dossier

Lorsque la structure des dossiers est comme ça, je veux lire les fichiers csv dans chaque fichier zip à la fois et les stocker dans la liste.

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

Code R

Vous pouvez accéder aux fichiers à l'intérieur sans ouvrir le zip avec les fonctions unzip et unz. Je voulais l'ajouter à la liste en tant qu'addition de python, mais je n'étais pas sûr, alors j'ai compromis ci-dessous.

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))

Code Python

Vous pouvez accéder à l'intérieur sans décompresser le fichier zip avec le module zipfile. enumerate renvoie l'index et l'élément de l'objet à transformer par l'instruction for, ce qui est pratique lors de l'ajout d'un traitement. (Dans l'exemple ci-dessous, c'est pareil même s'il n'est pas utilisé)

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 pour lire plusieurs fichiers csv dans plusieurs fichiers zip
Comment lire des fichiers CSV avec Pandas
Convertir des fichiers CSV UTF-8 pour les lire dans Excel
2 façons de lire tous les fichiers csv dans un dossier
Comment lire un csv contenant uniquement des entiers en Python
Translocation de fichiers CSV avec Python Partie 1
Lire des fichiers en parallèle avec Python
Élément de mémo Python efficace 11 Utilisez zip pour traiter les itérateurs en parallèle
Comment faire R chartr () en Python
Envoyer des e-mails à plusieurs destinataires avec Python (Python3)
Lire tous les fichiers csv dans le dossier
Lire Python csv et exporter vers txt
Lire et écrire des fichiers JSON avec Python
CSV en Python
Mémo n ° 4 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Comment lire un fichier CSV avec Python 2/3
Convertir le fichier FBX en ASCII <-> BINARY en Python
Résumé de la façon d'importer des fichiers dans Python 3
Mémo n ° 3 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Mémo n ° 1 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Lire et écrire des fichiers CSV et JSON avec Python
Lire les fichiers CSV chargés dans Flask sans les enregistrer
Gérer les fichiers zip avec des noms de fichiers japonais dans Python 3
Mémo n ° 2 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Comment obtenir les fichiers dans le dossier [Python]
Mémo n ° 7 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Mémo n ° 6 pour les débutants Python à lire "Explication détaillée de la grammaire Python"
Mémo n ° 5 que les débutants Python lisent "Explication détaillée de la grammaire Python"
Différentes façons de lire la dernière ligne d'un fichier csv en Python
Lire DXF avec python
Lire le fichier csv Python
[Python] Lecture de fichiers CSV
Convertissez l'image au format .zip en PDF avec Python
Comment télécharger des fichiers depuis Selenium of Python dans Chrome
Comment ajouter des numéros de page à un fichier PDF (en Python)
[Python] Un mémo pour écrire du CSV verticalement avec Pandas
Comment récupérer plusieurs tableaux à l'aide de slice en python.
Je veux utiliser le jeu de données R avec python
Supprimer les en-têtes de fichiers CSV à plusieurs formats avec python
Passer des dataframes contenant True / False de Python à R au format csv (pd.DataFrame-> tbl_df)
Lire csv avec des pandas python
Pour vider stdout en Python
Connectez-vous au site Web en Python
Lire la formule d'Euler en Python
Un moyen simple d'éviter plusieurs boucles for en Python
Comment définir plusieurs variables dans une instruction Python for
Conseils pour coder courts et faciles à lire en Python
Lire du XML avec un espace de noms spécifié en Python
Comment développer dans un environnement virtuel Python [Memo]
Lire les e-mails Outlook avec Python
Conversion par lots de tous les fichiers xlsx du dossier en fichiers CSV
Autoriser Python à sélectionner la chaîne de caractères du fichier d'entrée dans le dossier
Parler avec Python [synthèse vocale]
Écrire en csv avec Python
Décompressez plusieurs fichiers compressés (Python)
Évitez les boucles multiples en Python
[Python] Utilisez ceci pour lire et écrire des fichiers wav [wavio]
Comment développer en Python
Télécharger plusieurs fichiers avec Flask