Seite 1 von 1

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

Verfasst: Sonntag 25. Juli 2021, 18:17
von Strawk
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

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

Verfasst: Sonntag 25. Juli 2021, 18:41
von noisefloor
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

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

Verfasst: Sonntag 25. Juli 2021, 19:35
von Strawk
Angesichts der Lösung denkt man nicht selten "da hätte ich wahrlich auch selber drauf kommen können".
Gruß, Strawk