2 votes

Comment rechercher des valeurs dans un dictionnaire en python ?

J'ai un gros fichier csv avec le format suivant :

FICHIER CSV 1

id, person,   city
1,   John,     NY
2,   Lucy,    Miami
3,   Smith,   Los Angeles
4,   Mike,    Chicago
5,   David,   Los Angeles
6,   Daniel,    NY

Dans un autre fichier CSV, chaque ville est associée à un code numérique :

FICHIER CSV 2

city , code
NY   ,  100
Miami,  101
Los Angeles, 102
Chicago, 103

Ce que je dois faire, c'est parcourir le fichier CSV 1 dans la colonne "ville", lire le nom de la ville et obtenir le code numérique de cette ville à partir du fichier CSV 2. Je pourrais alors simplement sortir cette liste de codes de ville dans un fichier texte. Pour cet exemple, j'obtiendrais le résultat suivant :

100
101
102
103
102
100

J'ai utilisé csv.DictReader pour créer des dictionnaires pour chaque fichier mais je suis bloqué en essayant de trouver un moyen de faire correspondre chaque ville à chaque code.

Toute idée ou indication dans la bonne direction serait appréciée !

8voto

Jeremy Roman Points 9211

Vous disposez d'un espace blanc supplémentaire, et contrairement à certains formats de stockage, le format CSV en tient compte. Si ces espaces se trouvent dans vos données source, vous devrez peut-être les supprimer avant qu'elles ne soient traitées comme vous le souhaitez (sinon, certains champs auront des espaces blancs en début et en fin de ligne).

En supposant que l'espacement soit supprimé, c'est assez simple à faire. Il vous suffit de créer un dictionnaire associant les noms aux codes, sur la base du contenu de votre deuxième fichier.

from csv import DictReader

city_codes = {}
for row in DictReader(open('file2.csv', 'rb')):
    city_codes[row['city']] = row['code']

for row in DictReader(open('file1.csv', 'rb')):
    print city_codes[row['city']]

Naturellement, vous pouvez l'envoyer dans un fichier texte comme vous le souhaitez, en redirigeant simplement la sortie d'impression comme vous le feriez habituellement.

2voto

jvc26 Points 1700

En plus de ce que Jeremy a suggéré, vous pouvez utiliser la méthode string .strip() pour supprimer automatiquement les espaces blancs de début et de fin.

1voto

Michał Šrajer Points 9487

Pensez à utiliser sqlite3. Vous pourrez alors effectuer des jointures efficaces, simples et puissantes. Si les fichiers sont très volumineux, vous pouvez bénéficier de la création d'un index approprié.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X