edit README.md

This commit is contained in:
Syoul
2025-08-08 21:02:01 +02:00
parent 63aeef3dd2
commit a942952a8e

View File

@@ -28,10 +28,10 @@ def nettoyer_csv_texte(csv_in_path, csv_out_path):
with open(csv_in_path, "r", encoding="utf-8", errors="replace") as f: with open(csv_in_path, "r", encoding="utf-8", errors="replace") as f:
lines = f.readlines() lines = f.readlines()
# 1️⃣ Supprimer les 3 premières lignes quoi qu'il arrive # 1 Supprimer les 3 premières lignes quoi qu'il arrive
lines = lines[3:] lines = lines[3:]
# 2️⃣ Chercher la première ligne contenant MOT_DEBUT (SOLDE) # 2 Chercher la première ligne contenant MOT_DEBUT (SOLDE)
idx_debut = None idx_debut = None
for i, line in enumerate(lines): for i, line in enumerate(lines):
if MOT_DEBUT.lower() in line.lower(): if MOT_DEBUT.lower() in line.lower():
@@ -41,7 +41,7 @@ def nettoyer_csv_texte(csv_in_path, csv_out_path):
# Supprimer tout jusqu'à et y compris cette ligne # Supprimer tout jusqu'à et y compris cette ligne
lines = lines[idx_debut + 1:] lines = lines[idx_debut + 1:]
# 3️⃣ Supprimer à partir de la ligne contenant MOT_FIN (Total des mouvements) # 3 Supprimer à partir de la ligne contenant MOT_FIN (Total des mouvements)
idx_fin = None idx_fin = None
for i, line in enumerate(lines): for i, line in enumerate(lines):
if MOT_FIN.lower() in line.lower(): if MOT_FIN.lower() in line.lower():
@@ -50,19 +50,19 @@ def nettoyer_csv_texte(csv_in_path, csv_out_path):
if idx_fin is not None: if idx_fin is not None:
lines = lines[:idx_fin] lines = lines[:idx_fin]
# 4️⃣ Détection du séparateur sur un échantillon # 4 Détection du séparateur sur un échantillon
sample = "".join(lines[:20]) sample = "".join(lines[:20])
delim = detect_delimiter(sample) delim = detect_delimiter(sample)
# 5️⃣ Lecture en mode tolérant avec csv.reader # 5 Lecture en mode tolérant avec csv.reader
reader = csv.reader(lines, delimiter=delim) reader = csv.reader(lines, delimiter=delim)
rows = [row for row in reader] rows = [row for row in reader]
# 6️⃣ Normaliser le nombre de colonnes (éviter erreurs si certaines lignes sont plus courtes) # 6 Normaliser le nombre de colonnes (éviter erreurs si certaines lignes sont plus courtes)
max_cols = max(len(r) for r in rows) if rows else 0 max_cols = max(len(r) for r in rows) if rows else 0
rows = [r + [""] * (max_cols - len(r)) for r in rows] rows = [r + [""] * (max_cols - len(r)) for r in rows]
# 7️⃣ Supprimer les lignes dont le premier champ contient "date" (sauf on garde une copie pour l'entête globale) # 7 Supprimer les lignes dont le premier champ contient "date" (sauf on garde une copie pour l'entête globale)
header_line = None header_line = None
filtered_rows = [] filtered_rows = []
for r in rows: for r in rows:
@@ -73,7 +73,7 @@ def nettoyer_csv_texte(csv_in_path, csv_out_path):
continue # ne pas inclure cette ligne dans ce fichier final continue # ne pas inclure cette ligne dans ce fichier final
filtered_rows.append(r) filtered_rows.append(r)
# 8️⃣ Fusionner les lignes dont la première colonne est vide avec la précédente # 8 Fusionner les lignes dont la première colonne est vide avec la précédente
merged = [] merged = []
for r in filtered_rows: for r in filtered_rows:
if (r[0] or "").strip() == "" and merged: if (r[0] or "").strip() == "" and merged:
@@ -86,7 +86,7 @@ def nettoyer_csv_texte(csv_in_path, csv_out_path):
else: else:
merged.append(r) merged.append(r)
# 9️⃣ Nettoyer les deux dernières colonnes : supprimer les points dans les nombres # 9 Nettoyer les deux dernières colonnes : supprimer les points dans les nombres
if merged: if merged:
for r in merged: for r in merged:
if len(r) >= 2: if len(r) >= 2:
@@ -96,7 +96,7 @@ def nettoyer_csv_texte(csv_in_path, csv_out_path):
# Avant-dernière colonne # Avant-dernière colonne
r[-2] = r[-2].replace(".", "") r[-2] = r[-2].replace(".", "")
# 🔟 Sauvegarde du fichier nettoyé # 10 Sauvegarde du fichier nettoyé
with open(csv_out_path, "w", encoding="utf-8", newline="") as f: with open(csv_out_path, "w", encoding="utf-8", newline="") as f:
writer = csv.writer(f, delimiter=delim) writer = csv.writer(f, delimiter=delim)
writer.writerows(merged) writer.writerows(merged)