60 lines
1.7 KiB
Python
Executable File
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()
|