ptitspas-ynov-bdd/scripts/clean_csv.py

60 lines
1.7 KiB
Python
Executable File

#!/usr/bin/env python3
import csv
import sys
from pathlib import Path
def clean_csv_file(file_path: Path):
"""
Nettoie un CSV directement en place :
- remplace "NULL" par ""
- supprime les espaces parasites
- force le même nombre de colonnes que l'en-tête
"""
cleaned_rows = []
with open(file_path, "r", encoding="utf-8-sig", newline="") as infile:
reader = csv.reader(infile)
try:
header = next(reader)
except StopIteration:
print(f"[⚠️] Fichier vide : {file_path}")
return
nb_cols = len(header)
cleaned_rows.append([h.strip() for h in header])
for i, row in enumerate(reader, start=2):
# Ajuste le nombre de colonnes
if len(row) < nb_cols:
row.extend([""] * (nb_cols - len(row)))
elif len(row) > nb_cols:
row = row[:nb_cols]
# Nettoyage cellule par cellule
row = [cell.strip().replace("NULL", "") for cell in row]
cleaned_rows.append(row)
# Réécriture dans le même fichier
with open(file_path, "w", encoding="utf-8", newline="") as outfile:
writer = csv.writer(outfile)
writer.writerows(cleaned_rows)
print(f"[✔] Nettoyé : {file_path}")
def main():
if len(sys.argv) > 1:
base_dir = Path(sys.argv[1])
else:
base_dir = Path("bdd/data_test")
print(f"🔎 Nettoyage des CSV dans : {base_dir}")
for file_path in base_dir.glob("*.csv"):
clean_csv_file(file_path)
print(f"✅ Terminé. Les fichiers CSV ont été écrasés (nettoyés en place).")
if __name__ == "__main__":
main()