Manipuler un répertoire téléphonique csv en python
Résolu/Fermémamiemando Messages postés 33535 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 12 février 2025 - 15 nov. 2022 à 18:50
- Répertoire téléphonique python
- Répertoire téléphonique gratuit - Télécharger - Bureautique
- Localiser un indicatif téléphonique - Guide
- Citizen code python avis - Accueil - Outils
- Annuaire téléphonique gratuit - Télécharger - Bases de données
4 réponses
Modifié le 13 nov. 2022 à 10:26
Bonjour,
Il te faut mettre ton second script dans une fonction qui reçoit un paramètre rech_nom(nom), et tester dans la boucle la concordance entre colonne[0] et nom
Puis dans le corps du programme tu saisis avec un input le nom à rechercher et ce nom tu le passes en paramètre à la fonction.
Cette solution comporte une petite anomalie, il faudrait ne pas traiter la première ligne qui comporte les titres de colonnes, ne pas répondre Trouvé si l'utilisateur saisit 'NOM'. Et dans tes consignes, tu utilises la bibliothèque csv pour créer le fichier, ne dois tu pas aussi l'utiliser en lecture ?
Bonjour,
Normalement je ne dois pas importer de bibliothèque, mais je n'y arrivais pas sans. Du coup, j'ai utilisé la bibliothèque csv.
Modifié le 13 nov. 2022 à 11:53
Si tu veux créer un fichier texte au même format que le .csv, tu peux utiliser la méthode inverse de .split(), .join()
data_to_append = [['NOM','Prenom','Telephone'], ['BILL' ,'Phil', '0692451234'], ['TACK', 'Loic', '0262849013']] with open('repertoire.txt', 'w', encoding='utf8') as mon_fichier: for ligne in data_to_append: mon_fichier.write(','.join(ligne)+'\n') mon_fichier.close() with open('repertoire.txt', 'r', encoding='utf8') as mon_fichier: repertoire=mon_fichier.readlines() for ligne in repertoire : colonne= ligne.split(',') print(colonne[0]) mon_fichier.close()
(*) pour obtenir la coloration syntaxique du code, dans la saisie, il faut choisir le langage, Python
Un fichier CSV a une entête qui te dérange sans doute. Tu pourrais écrire le fichier avec le write ordinaire: file.write.
Tu peux utiliser tout de même la virgule comme séparateur. Tu pourrais regarder la méthode join() pour tout coller ensemble.
N'oublie pas la fin de ligne '\n'
Pour lire, tu es bien parti avec le split.
Il suffit de vérifier pour chaque ligne lue et séparée si les valeurs aux indices désirées sont égales à ce que tu cherches.
Modifié le 15 nov. 2022 à 18:51
Bonjour,
Voici comment tu peux faire :
import sys entries = [ ['NOM', 'Prenom','Telephone'], ['BILL' ,'Phil', '0692451234'], ['TACK', 'Loic', '0262849013'] ] def entries_to_csv(entries: list) -> str: return "\n".join( ",".join( str(value) for value in entry ) for entry in entries ) def load_csv(f) -> list: return list( line.strip().split(",") for line in f.readlines() ) def find_entry(entries: list, name: str) -> list: return filter( lambda entry: entry[0] == name, entries ) with open("repertoire.csv", "w") as f: print(entries_to_csv(entries), file=f) with open("repertoire.csv", "r") as f: entries2 = load_csv(f) print(entries2) for name in ("BILL", "TACK", "PLOP"): found_entries = list(find_entry(entries2, name)) if not found_entries: print(f"Searched {name}: not found", file=sys.stderr) else: print(f"Searched {name}: {len(found_entries)} result(s) found: {found_entries}")
Résultat :
[['NOM', 'Prenom', 'Telephone'], ['BILL', 'Phil', '0692451234'], ['TACK', 'Loic', '0262849013']]
Searched BILL: 1 result(s) found: [['BILL', 'Phil', '0692451234']]
Searched TACK: 1 result(s) found: [['TACK', 'Loic', '0262849013']]
Searched PLOP: not found
Bonne chance