Stopwörter entfernen und neue Textdatei erstellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
eloziomek
User
Beiträge: 9
Registriert: Dienstag 29. September 2015, 18:13

Hallo zusammen,
als blutiger Anfänger habe ich eine Frage zum Erstellen neuer Textdateien.

Das Entfernen der Stopwörter hat mit dem unten stehenden Code funktioniert, ich kann das Ergebnis aber nicht in eine neue Datei schreiben.

Fehlermeldung:
newfile.write(filtered_sentence)
TypeError: expected a character buffer object

Wie erstelle ich den Buffer und übergebe ihn in die neue Datei?
Für schnelle Antworten bin ich sehr dankbar! Micha

Code: Alles auswählen

example_datei = open('test.txt', 'r').read().split()
stop_words = open('stopwords.txt', 'r').read().split()

words = (example_datei)
filtered_sentence = [w for w in words if not w in stop_words]

newfile = open("newfile.txt", "w")
newfile.write(filtered_sentence)

example_datei.close()
stop_words.close()
newfile.close()
BlackJack

@eloziomek: `filtered_sentence` ist halt eine Liste und da weiss die Methode nichts mit anzufangen. Mach aus dem Inhalt eine Zeichenkette in dem Du beispielsweise die einzelnen Elemente an einem Trennzeichen/einer Trennzeichenkette zusammenfügst. Zeichenketten haben da so eine praktische `join()`-Methode für.

Kritik am Quelltext: Dateien die man öffnet sollte man auch wieder schliessen. Am besten verwendet man das ``with``-Schlüsselwort. Die `close()`-Aufrufe gehen in zwei von drei Fällen schief weil es sich nicht um Objekte handelt die eine `close()`-Methode hätten.

Zeile 4 ist an sich schon sinnlos — die Klammern um die rechte Seite der Zuweisung machen ebenfalls keinen Sinn.

`stop_words` wäre aus effizienzgründen besser ein `set()` statt einer Liste.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

zusätzlich noch ein Zitat aus der Python-Doku in Bezug auf `write`: "To write something other than a string, it needs to be converted to a string first:"

Gruß, noisefloor
eloziomek
User
Beiträge: 9
Registriert: Dienstag 29. September 2015, 18:13

@BlackJack
Danke! Hat geklappt!
Antworten