Identifiez rapidement plusieurs tables dans les fichiers csv?

J’ai beaucoup de fichiers csv, dont je dois extraire le chemin et les en-têtes. Le script python que j’utilise à cet effet fonctionne comme un charme:

#!/usr/bin/python import os import csv thisdir = os.getcwd() # Create empty list for csvfiles csvfiles = [] # Extract file-paths and append them to "csvfiles" for r, d, f in os.walk(thisdir): # r=root, d=directories, f = files for file in f: if ".csv" in file: csvfiles.append(os.path.join(r, file)) # Create header-extraction function: def get_csv_headers(filename): with open(filename) as f: reader = csv.reader(f, delimiter=",") return next(reader) # Create empty list for headers headers=[] # Extract headers with the function and append them to "headers" list for l in csvfiles: headers.append(get_csv_headers(l)) with open('text.csv', 'w') as f: writer = csv.writer(f, delimiter=',') # In EU: use semicolon; else comma for path, header in zip(csvfiles, headers): writer.writerow(list(path.split("/")[1:]) + header) 

Mais! Je viens de réaliser que certains fichiers csv contiennent plusieurs tables! Il n’y a pas de cohérence dans la façon dont les tables sont “séparées” – certaines ont plusieurs lignes d’espace, et d’autres non. Les en-têtes contiennent tous des lettres et des numéros de lignes de tableau (certains suivis de lettres). Il semble fastidieux de parcourir tous les fichiers +200 csv pour vérifier s’il y a plusieurs tables dans des fichiers csv uniques.

Savez-vous comment identifier rapidement les fichiers csv qui contiennent plusieurs tables (ligne de commande ou similaire), extraire les en-têtes de plusieurs tables dans une seule csv – ou d’autres idées créatives où je ne dois pas ouvrir et parcourir tous les fichiers csv? des dossiers. Toutes les idées (ligne de commande / python) sont les bienvenues!

Je vous remercie!

Cheers, Birgitte

Si vous voulez juste savoir, quel fichier contient combien d’en-têtes (en supposant qu’il n’y ait pas de numéro dans l’en-tête):

 @echo off for %%f in (*.csv) do ( for /f %%i in ('findstr /v "[0-9]" "%%f" ^|find /c /v ""') do ( echo there are %%i Headers in %%f ) ) 

L’extérieur for itérations sur vos fichiers .csv , l’interne for obtient le nombre d’en-têtes par fichier en filtrant les lignes sans chiffres (avec findstr /v "[0-9] ) et en les comptant (avec find /c ).