J'ai deux fichiers qui se ressemblent exactement: file1
1 in seattle today the secretary of education richard riley delivered his address
1 one of the things he focused on as the president had done
1 abc's michele norris has been investigating this
2 we're going to take a closer look tonight at the difficulty of getting meaningful
File2
1 in seattl today the secretari of educ richard riley deliv hi address
1 one of the thing he focus on a the presid had done
1 abc michel norri ha been investig thi
2 we'r go to take a closer look tonight at the difficulti of get meaning
Lorsque j'exécute ce code:
result=defaultdict(list)
with open("onthis.txt","r") as filer:
for line in filer:
label, sentence= line.strip().split(' ', 1)
result[label].append(sentence)
Cela fonctionne parfaitement pour file1 mais me donne une erreur de valeur pour file2:
label, sentence= line.strip().split(' ', 1)
ValueError: need more than 1 value to unpack
Je ne semble pas saisir la raison quand ils sont tous les deux dans le même format. Donc, je viens de supprimer les lignes vides par cette commande de terminal:
sed '/^$/d' onthis.txt > trial
Mais la même erreur apparaît.
3 réponses
Ils ne peuvent pas être exactement les mêmes. Je suppose qu'il y a une ligne vide / espace blanc quelque part dans votre deuxième fichier, probablement à la fin.
L'erreur vous indique que lors de l'exécution du fractionnement, il n'y a pas d'espaces sur lesquels diviser, donc une seule valeur est renvoyée, plutôt qu'une valeur pour label
et sentence
.
Sur la base de votre modification, je pense que vous pourriez avoir encore des lignes "vides" dans votre fichier texte. Eh bien, je devrais probablement mieux dire: des lignes remplies de rien d'autre que des espaces blancs.
J'ai étendu votre exemple de fichier:
1 in seattl today the secretari of educ richard riley deliv hi address
1 one of the thing he focus on a the presid had done
1 abc michel norri ha been investig thi
2 we'r go to take a closer look tonight at the difficulti of get meaning
3 foo
4 bar
5 qun
Ce n'est probablement pas clair, mais la ligne entre 3 foo
et 4 bar
est remplie par quelques espaces blancs tandis que les lignes entre 4 bar
5 qun
ne sont "que" de nouvelles lignes ({{ X4}}).
Remarquez la sortie de sed '/^$/d'
1 in seattl today the secretari of educ richard riley deliv hi address
1 one of the thing he focus on a the presid had done
1 abc michel norri ha been investig thi
2 we'r go to take a closer look tonight at the difficulti of get meaning
3 foo
4 bar
5 qun
Les lignes vides sont vraiment supprimées - sans aucun doute. Mais les lignes d'espaces blancs pseudo-vides sont toujours là. L'exécution de votre script python générera une erreur en atteignant cette ligne:
2 we'r go to take a closer look tonight at the difficulti of get meaning
3 foo
Traceback (most recent call last):
File "python.py", line 9, in <module>
label, sentence= line.strip().split(' ', 1)
ValueError: need more than 1 value to unpack
Donc, ma suggestion serait d'étendre votre script d'une ligne, en faisant sauter des lignes vides dans votre fichier d'entrée.
for line in filer:
if not line.strip(): continue
Cela a pour effet secondaire positif de ne pas avoir à préparer vos fichiers d'entrée avec un peu de sed
- magie auparavant.
Sur la base de ce qui précède que vous avez fourni (avec un ajustement). Cela semble donner le résultat escompté.
result = {}
with open("test.txt", "r") as filer:
for line in filer:
label, sentence = line.strip().split(' ', 1)
try:
result[label].append(sentence)
except KeyError:
result[label] = [sentence]
Production:
{'2': ["we'r go to take a closer look tonight at the difficulti of get meaning"], '1': ['in seattl today the secretari of educ richard riley deliv hi address', 'one of the thing he focus on a the presid had done', 'abc michel norri ha been investig thi']}
Cela doit donc signifier qu'il nous manque quelque chose dans ce que vous avez fourni. Je pense que si ce qui précède ne vous donne pas ce dont vous avez besoin, alors plus d'informations sont nécessaires
Questions connexes
Questions liées
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.