Und es ist in der Regel auch sinnvoll die Quelle der Aufgabe zu nennen und in diesem Fall beispielsweise auch das die Datendatei, die in der Aufgabe verwendet wird zum Download bereit steht (
http://www.py4e.com/code3/mbox-short.txt).
Falls Du das Buch dazu verwendest: Der Autor verwendet da bei dem Thema Dateien sehr oft `open()` und in den Beispielen mit der genannten Textdatei nie `close()`. Und soweit ich das gesehen habe auch bei keinem der Beispiele die ``with``-Anweisung. Die Kodierung wird auch nirgends beim öffnen angegeben, er hofft da also darauf, dass das System ASCII als Untermenge der verwendeten Kodierung hat, und das die Textdatei tatsächlich nur ASCII enthält. Kann er sich als Amerikaner vielleicht erlauben. Wenn man beliebige MBOX-Dateien robust verarbeiten können will, muss man wesentlich offener sein was die an Kodierungen enthalten können, bis hin zu *verschiedene* Kodierungen in der gleichen Datei.
Was auch nicht berücksichtigt wird, ist das die Header-Daten in einer MBOX zwar eine empfohlene Schreibweise haben, letztlich aber in der Gross-/Kleinschreibung davon abweichen können. Das müsste eine robuste Verarbeitung auch berücksichtigen. Insgesamt eignet sich dieses nur auf den ersten Blick einfach Dateiformat nicht wirklich als Beispiel für einfache Textverarbeitung. Da bräuchte man sowohl für das MBOX-Format, als auch für die einzelnen Nachrichten darin, ordentliche Parser. Die gibt es in der Python-Standardbibliothek sogar.
Es wird in dem Buch/Beispielen teilweise keine neue Zeile für Blöcke angefangen wenn die nur aus einer Zeile bestehen, es kommt für meinen Geschmack viel zu oft ``continue`` vor, und `exit()` ohne das aus `sys` zu importieren um einfach mal das Programm zu beenden, und nicht um tatsächlich einen Rückgabecode an den Aufrufer zu übermitteln.
Und dann so Namen wie `fname` und `fhand` statt `filename` und `file_handle`. Wobei letzteres IMHO seine eigene Problematik hat, weil da Informationen aus der Schicht unter der Implementierung enthalten sind, mit der man Python-Programmierer nicht behelligen sollte. Schon gar nicht Anfänger, die damit ja gar nichts anfangen können. In Python ist das einfach ein Dateiobjekt, also `file`.
Das physische Bildschirmfoto hat übrigens eine schlechte Qualität, so dass ich nicht 100% sagen kann ob ich den Fehler entdeckt habe, oder ob man das nur nicht richtig erkennen kann.