collections.Counter-Ergebnis in Datei schreiben schlägt fehl

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
Benutzeravatar
Strawk
User
Beiträge: 227
Registriert: Mittwoch 15. Februar 2017, 11:42
Wohnort: Aachen
Kontaktdaten:

Hallo!
Ich möchte das Ergebnis von collections.Counter für jedes Wort eines Wörterbuchs in eine Datei schreiben. Ob aber
der Schreibbefehl lautet:

Code: Alles auswählen

single_result = str(collections.Counter(line))
    resultfile.write(single_result)
    resultfile.write('\n')
oder

Code: Alles auswählen

single_result = str(collections.Counter(line))
resultfile.write(single_result + '\n')
oder

Code: Alles auswählen

resultfile.write(str(collections.Counter(line)) + '\n')
oder

Code: Alles auswählen

resultfile.write("%s\n" % (collections.Counter(line)))
jedes Mal erhalte ich diesen Schrott (Ausschnitt):
Counter({'A': 2, '\n': 1})
Counter({'A': 3, '\n': 1})
Counter({'A': 1, 'a': 1, 'c': 1, 'h': 1, 'e': 1, 'n': 1, '\n': 1})
Counter({'e': 2, 'A': 1, 'a': 1, 'c': 1, 'h': 1, 'n': 1, 'r': 1, '\n': 1})
Counter({'e': 2, 'n': 2, 'A': 1, 'a': 1, 'c': 1, 'h': 1, 'r': 1, 'i': 1, '\n': 1})
Counter({'n': 4, 'e': 3, 'A': 1, 'a': 1, 'c': 1, 'h': 1, 'r': 1, 'i': 1, '\n': 1})
Counter({'e': 2, 'n': 2, 'A': 1, 'a': 1, 'c': 1, 'h': 1, 'r': 1, '\n': 1})
Counter({'e': 2, 'A': 1, 'a': 1, 'c': 1, 'h': 1, 'n': 1, 'r': 1, 's': 1, '\n': 1})
Counter({'a': 2, 'h': 2, 'A': 1, 'c': 1, 'e': 1, 'n': 1, 'f': 1, 'r': 1, 't': 1, '\n': 1})
Counter({'a': 2, 'h': 2, 'e': 2, 'n': 2, 'A': 1, 'c': 1, 'f': 1, 'r': 1, 't': 1, '\n': 1})
Counter({'e': 3, 'A': 1, 'a': 1, 'c': 1, 'h': 1, 'n': 1, 'r': 1, 'i': 1, 's': 1, '\n': 1})
Counter({'e': 3, 'n': 2, 'A': 1, 'a': 1, 'c': 1, 'h': 1, 'r': 1, 'i': 1, 's': 1, '\n': 1})
Counter({'A': 1, 'a': 1, 'c': 1, 'h': 1, 'e': 1, 'n': 1, 's': 1, '\n': 1})
Counter({'A': 1, 'a': 1, 'd': 1, 'o': 1, 'r': 1, 'f': 1, '\n': 1})
Counter({'A': 1, 'a': 1, 'd': 1, 'o': 1, 'r': 1, 'f': 1, 's': 1, '\n': 1})
Counter({'A': 1, 'a': 1, 'l': 1, '\n': 1})
Der Line-Feed wurde also Bestandteil von Counter. Was ich nicht wünsche. Wie vermeiden?
Grüße, Strawk
Ich programmiere erfolglos, also bin ich nicht.
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

`collections.Counter()` liefert ein Dict als Ergebnis zurück. Wenn du als das Ergebnis der Zählung haben willst / in eine Datei schreiben willst, dann musst du darüber iterieren. Oder willst du wirklich die String-Represantation in die Datei schreiben?

Wenn du `line` aus einer Datei liest, dann ist da halt ein Zeilenumbruch am Ende dran - sonst hättest du keine Zeilen in der Datei. Den musst du halt vorher entfernen, z.B. mit `strip()`.

Gruß, noisefloor
Benutzeravatar
Strawk
User
Beiträge: 227
Registriert: Mittwoch 15. Februar 2017, 11:42
Wohnort: Aachen
Kontaktdaten:

Angesichts der Lösung denkt man nicht selten "da hätte ich wahrlich auch selber drauf kommen können".
Gruß, Strawk
Ich programmiere erfolglos, also bin ich nicht.
Antworten