Est-il possible de lire les données d'un fichier csv dans un dictionnaire, de sorte que la première colonne soit la clé et la deuxième colonne.
Par exemple. J'ai un fichier csv
>>> The key 123456 has this value :Lorem ipsum dolor sit amet, consectetur adipiscing elit
le code représente les clés, et msg représente les valeurs associées à chaque code.
key= "123456" value=mydict.get(key) print(key + "has this value : " + value)
Résultat:
{'code;msg': [], '123456;Lorem ipsum dolor sit amet': [' consectetur adipiscing elit'], '345981;"sed do eiusmo ut labore': [' et dolore magna aliqua;"'], '459827;ullamco': [' laboris nisi ut aliquip ex ea commodo consequat.'], '490023;veniam': [' quis nostrud exercitation'], '345612;mollit anim id est laborum.': []}
None
Je voudrais rechercher les valeurs associées à chaque clé.
EG: Quand j'écris:
import csv
with open('test.csv') as f:
reader = csv.reader(f)
mydict = {rows[0]:rows[1:] for rows in reader}
print(mydict)
x = mydict.get("123456")
print(x)
3 Réponses :
Le problème est avec les données d'entrée, le fichier contient plusieurs virgules et vous lisez avec un lecteur csv. La deuxième colonne doit être entourée de guillemets doubles.
{123456: ['Lorem ipsum dolor sit amet, consectetur adipiscing elit'],
345981: ['sed do eiusmo ut labore, et dolore magna aliqua;'],
459827: ['ullamco, laboris nisi ut aliquip ex ea commodo consequat.'],
490023: ['veniam, quis nostrud exercitation'],
345612: ['mollit anim id est laborum.']}
Après avoir modifié les données si vous exécutez votre extrait de code, cela fonctionnera correctement.
import pandas as pd
df = pd.read_csv(filepath_or_buffer = CSV_FILE_PATH")
df.set_index('code').T.to_dict('list')
Vous pouvez utiliser la méthode todic dans les pandas, lire le fichier csv à l'aide de pandas, puis le convertir en dataframe, puis exécuter le code ci-dessous
XXX
Code complet:
df.set_index('code').T.to_dict('list')
Sortie:
{'code': ['msg'], '123456': ['Lorem ipsum dolor sit amet, consectetur adipiscing elit'], '345981': ['sed do eiusmo ut labore, et dolore magna aliqua;'], '459827': ['ullamco, laboris nisi ut aliquip ex ea commodo consequat.'], '490023': ['veniam, quis nostrud exercitation'], '345612': ['mollit anim id est laborum.']}
['Lorem ipsum dolor sit amet, consectetur adipiscing elit']
Je ne vois pandas #tag nulle part sur cette page, pourquoi avez-vous publié ceci?
Utilisation du module csv .
Ex:
{'123456': 'Lorem ipsum dolor sit amet, consectetur adipiscing elit',
'345612': 'mollit anim id est laborum.',
'345981': 'sed do eiusmo ut labore, et dolore magna aliqua',
'459827': 'ullamco, laboris nisi ut aliquip ex ea commodo consequat.',
'490023': 'veniam, quis nostrud exercitation'}
Sortie:
import csv
result = {}
with open('test.csv') as infile:
reader = csv.reader(infile, delimiter=';')
next(reader) #Skip Header
for row in reader: #Iterate Each Line
result[row[0]] = row[1] #Form Dictionary
print(result)
Sans aucune importation, vous pouvez utiliser:
print(d.keys(), d.values()) # dict_keys(['123456', '345981', '459827', '490023', '345612']) # dict_values(['Lorem ipsum dolor sit amet, consectetur adipiscing elit', 'sed do eiusmo ut labore, et dolore magna aliqua;', 'ullamco, laboris nisi ut aliquip ex ea commodo consequat.', 'veniam, quis nostrud exercitation', 'mollit anim id est laborum.'])
Sortie:
if '123456' in d:
print(d['123456'])
# Lorem ipsum dolor sit amet, consectetur adipiscing elit
Remarques:
Pour rechercher par clé , j'utilise normalement:
{'123456': 'Lorem ipsum dolor sit amet, consectetur adipiscing elit', '345981': 'sed do eiusmo ut labore, et dolore magna aliqua;', '459827': 'ullamco, laboris nisi ut aliquip ex ea commodo consequat.', '490023': 'veniam, quis nostrud exercitation', '345612': 'mollit anim id est laborum.'}
Impression des touches du dictionnaire et des valeurs
with open('test.csv') as f:
csv = f.readlines()
d = {}
for line in csv[1:]: # Loop csv lines skipping first line csv[1:] (headers)
m = line.split()
if len(m) > 1:
d[m[0]] = " ".join(m[1:])
print(d)
quel est votre problème ici?
Je décris déjà ce que j'aimerais avoir comme sortie