écriture d'un fichier csv avec un dictionnaire
Bonjour à tous,
Je voudrais écrire un fichier CSV avec un dictionnaire que j'ai créé et dont les valeurs sont contenues dans des variables.
Je récupère les valeurs en utilisant le module regex.
Le problème, c'est que le code me génère les données de la dernière ligne en la dupliquant.
Un extrait de mon code.
import os import re import csv rep = "C:/Users/YELLE/Documents/Coordonnées/traitements 6.6/I16T08" for nom in os.listdir(rep): f = os.path.join(rep, nom, ) # print(f) if os.path.isfile(f) and f.endswith(".LAS"): with open(f, "r") as lasfile: texte = lasfile.readlines() # print(texte) nom_tir = (re.findall(r'[A-Z]\d{1,2}[A-Z]\d{1,2}', texte[14])) prof = (re.findall(r'\d{1,2}\.\d{1,2}', texte[9])) # prof nom_sonde = ((re.findall(r'GGWL_\d{2,4}', texte[15]))) #sonde chantier = (re.findall(r"\s[a-zA-Z]+.[a-zA-Z]+", texte[20])) diametre = (re.findall(r'\d{2,3}\.\d{1,2}', texte[27])) #diam date = (re.findall(r'\d{2}/\d{2}/\d{2}', texte[37])) # date operateur = (re.findall(r"\s[a-zA-Z]+.[a-zA-Z]+.[a-zA-Z]", texte[42])) # ope = (re.sub(r"\s\s+", " ", texte[42])) # operateur # matches = re.search(r"\.(.*)\:", ope) # operateur = matches.group(1) # print(re.findall(r'\d{2,4}', texte[44])) #baie # print(re.findall(r'\d{2}:\d{2}', texte[41])) #heure # donnees = (texte[58:]) # # print(donnees) # for ligne in donnees: # tst = (ligne.split()) # # print(tst) # pas = float(tst[0]) # gros = float(tst[1]) # vitesse = float(tst[2]) # print(pas) # print(gros) # print(vitesse) # resultats = (chantier, nom_tir, diametre, nom_sonde) # print(resultats) # print(type(resultats)) header = ["gis", "tir", "diam", "sonde","profondeur"] dictionnaire = {"gis": chantier, "tir": nom_tir, "diam": diametre, "sonde": nom_sonde, "profondeur": prof} print(dictionnaire) monfichier = "C:/Users/YELLE/Desktop/monfichier.csv" with open(monfichier, "w", newline="\n") as csvfile: writer = csv.DictWriter(csvfile, fieldnames=header) writer.writeheader() for element in dictionnaire: writer.writerow(dictionnaire) with open("monfichier.csv", "r") as f: reader = csv.DictReader(f) for ligne in reader: print(ligne)
D'avance merci pour toute aide
- écriture d'un fichier csv avec un dictionnaire
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier bin - Guide
- Télécharger dictionnaire larousse pdf gratuit - Télécharger - Dictionnaires & Langues
- Fichier rar - Guide
5 réponses
bonjour,
Ta première erreur, je pense, est d'utiliser l'option "w" en ligne 45. Cela crée donc à chaque fois un nouveau fichier.
Je pense que cela explique que tu ne voies que les données de la dernière ligne.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionL'origine m'en semble limpide. Examine bien tes lignes 48 et 49.
En réalité, l'ensemble de ton code est mal conçu. On dirait que tu as commencé avec l'idée d'accumuler toutes les données et puis de tout écrire dans le fichier csv. Puis que tu as oublié cette idée et que tu écris au fur et à mesure.
Du coup, tout est bancal.
Je rejoins yg_be, de manière générale, on ne s'amuse pas à ouvrir plusieurs fois un même fichier, on le fait une fois pour toute, et tant qu'on en a besoin. Dans ton cas, tu devrais avoir deux descripteurs de fichiers ouverts : un en lecture, et un en écriture. On peut écrire dans un fichier ouvert en écriture avec :
with open("bonjour.txt", "w") as f: for i in range(10): print(i, file=f)
Par ailleurs, vu que le donnée que tu veux sauver est un dictionnaire, il serait peut être plus avisé de la sauver dans un fichier json (au lieu de csv) :
import json d = {"a": 1, "b": 2} # Sauvegarde dans toto.json with open("toto.json", "w") as f: json.dump(d, fp=f) # Chargement depuis toto.json d2 = None with open("toto.json", "r") as f: d2 = json.load(fp=f) print(d2)
Bonne chance