Comment puis-je réparer ValueError: Trop de valeurs à décompresser "en Python?
Je suis en train de remplir un dictionnaire avec le contenu de mon fichier texte ("out3.txt").
Mon fichier texte est de la forme:
vs,14100
mln,11491
the,7973
cts,7757
...et ainsi de suite...
Je veux que mon dictionnaire answer
être de la forme:
answer[vs]=14100
answer[mln]=11491
...et ainsi de suite...
Mon code est:
import os
import collections
import re
from collections import defaultdict
answer = {}
answer=collections.defaultdict(list)
with open('out3.txt', 'r+') as istream:
for line in istream.readlines():
k,v = line.strip().split(',')
answer[k.strip()].append( v.strip())
Mais, j'obtiens:
ValueError: trop de valeurs pour décompresser
Comment puis-je résoudre ce problème?
source d'informationauteur Poker Face
Vous devez vous connecter pour publier un commentaire.
Vous avez vide
line
s dans votre fichier d'entrée, et je soupçonne que l'un desline
s que vous n'avez pas partagé avec nous a trop de virgules dans elle (d'où un trop grand nombre de valeurs à déballer").Vous pouvez vous protéger contre ce, comme suit:
Remarque: En passant
1
enstr.split()
tout ce qui est après la première virgule sera affecté àv
; si ce n'est pas le comportement souhaité et vous préférez ces lignes pour être rejetée, vous pouvez supprimer cet argument.Votre solution n'a pas à donner votre sortie désirée. Vous aurez (en supposant qu'il a travaillé),
answer['vs'] = [14100]
la ci-dessous ne fait que ce que vous:Vous n'avez pas besoin de la
collections
ici. Plaine anciens dict est assez:Avis de la
answer.get()
est similaire àanswer[]
mais vous pouvez fournir le défaut de la valeur.Vous ne devez pas utiliser
.readlines()
dans la boucle. Même la ligne vide contient le caractère de saut de ligne. De cette façon, le testif line:
ne détecte les lignes vides. Ou vous avez de la bande (ourstrip
) en premier, ou vous pouvez diviser la ligne de la liste et de tester le nombre d'éléments.