2012-04-15 9 views
2

Ich habe einen spanischen Roman, in einer einfachen Textdatei, und ich möchte ein Python-Skript, das eine Übersetzung in Klammern nach schwierigen Worten setzt. Ich habe eine Liste der Wörter (mit Übersetzungen), die ich in einer separaten Textdatei machen möchte, die ich richtig zu formatieren versucht habe. Ich habe alles vergessen, was ich über Python wusste, was anfangs sehr wenig war, also kämpfe ich. Dies ist ein jemand Skript hat mir geholfen, mit:Versuchen, Python-Skript verwenden, um Zeichenfolgen zu Datei

bookin = (open("C:\Users\King Kong\Documents\_div_tekstfiler_\coc_es.txt")).read() 
subin = open("C:\Users\King Kong\Documents\_div_tekstfiler_\cocdict.txt") 
for line in subin.readlines(): 
    ogword, meaning = line.split() 
    subword = ogword + " (" + meaning + ")" 
    bookin.replace(ogword, subword) 
    ogword = ogword.capitalize() 
    subword = ogword + " (" + meaning + ")" 
    bookin.replace(ogword, subword) 
subin.close() 
bookout = open("fileout.txt", "w") 
bookout.write(bookin) 
bookout.close() 

Als ich das lief, bekam ich diese Fehlermeldung:

Traceback (most recent call last): 
File "C:\Python27\translscript_secver.py", line 4, in <module> 
ogword, meaning = line.split() 
ValueError: too many values to unpack 

Der Roman ziemlich groß, und das Wörterbuch, das ich gemacht habe aus etwa zehntausend Schlüsselwertpaare.

Bedeutet das, dass etwas mit dem Wörterbuch nicht stimmt? Oder es ist zu groß? Ich habe das schon oft erforscht, aber ich kann mir keinen Sinn daraus machen. Jeder Rat würde geschätzt werden.

Antwort

2

line.split() in ogword, meaning = line.split() gibt eine list zurück, und in diesem Fall kann es mehr als 2 Werte zurückgeben. Schreiben Sie Ihren Code so, dass er mehr als zwei Werte verarbeiten kann. Zum Beispiel durch line.split() zu einer Liste zuweisen und dann zu behaupten, dass die Liste zwei Elemente hat:

mylist = line.split() 
assert len(mylist) == 2 
+1

Danke, werde ich versuchen, diese – Yngve

2
ogword, meaning = line.split()[:2] 
+0

Dieser Ansatz funktioniert, wenn Sie Zeilen ignorieren möchten, in denen Python ValueError auslöst. – San4ez

1
split() 

gibt eine einzige Liste, dh ein Element, Sie versuchen, diese eine Sache zu ordnen zwei Variablen.

Es funktioniert, wenn die Anzahl der Elemente in der Liste gleich der Anzahl der Variablen auf der linken Seite der Zuweisungsanweisung ist. Das heißt, die Liste wird entpackt und die einzelnen Teile werden den Variablen auf der linken Seite zugewiesen.

In diesem Fall, wie von @Josvic Zammit angegeben, kann das Problem auftreten, wenn mehr als 2 Elemente in der Liste vorhanden sind und nicht ordnungsgemäß "entpackt" und zugeordnet werden können.

+0

Diese Anweisung funktioniert korrekt, wenn 'split()' 2 Elemente zurückgibt. –

+0

ah, cool, ich wusste das nicht .. was ist das richtige Protokoll hier, kann ich (kann ich?) Meine Antwort löschen? – Levon

+0

Nicht sicher über das Protokoll, aber jemand könnte "-1", da es die Frage nicht richtig beantwortet (aber es ist technisch nicht falsch, weil 'split()' eine Liste zurückgibt!). –

2

line.split() geben Sie eine Liste der Wörter (Leerzeichen getrennt) in Zeile zurück. Der Fehler, den Sie bekommen, deutet darauf hin, dass Ihr Wörterbuch irgendwo mehr als nur ein Paar enthält. Sie können eine Ablaufverfolgungsnachricht hinzufügen, um den Fehler zu finden (siehe unten).

Wenn Ihr Wörterbuch umfangreichere Definitionen als Synonym enthält, können Sie die folgenden Zeilen verwenden, die das erste Wort in ogword und die folgenden in Bedeutung setzen.

words = line.split() 
ogword, meaning = words[0], " ".join(words[1:]) 

Wenn Ihre Wörterbuchsyntax komplexer ist (zusammengesetztes Wort), müssen Sie sich auf ein explizites Trennzeichen verlassen. Sie immer noch geteilten Ihre Linien teilen können

Edit (line.split("=") wird eine Linie auf „=“ Zeichen aufgeteilt): ignorieren und schlechte Linien angezeigt werden, ersetzen ogword, meaning = line.split() mit

try: 
    ogword,meaning = line.split() 
except: 
    print "wrong formated line:", line 
    continue 
+0

Danke, ich werde versuchen, Sinn zu machen – Yngve

Verwandte Themen