@PeterL:
Eingerückt wird per Konvention mit vier Leerzeichen pro Ebene, nicht sieben.
Man kann und soll in Python direkt über die Elemente einer Liste iterieren, nicht umständlich über den Index.
Statt selber einen Counter zu verwalten verwendet man
enumerate().
Wobei in
pgn,
position und
counter bei dir vermutlich sowieso immer dieselbe Zahl steht und du deswegen zwei davon weglassen kannst.
Deine Zuweisungen an
position und
save sind sinnlos, weil da in Python nichts kopiert wird, sondern nur das bestehende Objekt an einen neuen Namen gebunden wird. Da kannst du auch einfach die Zuweisung weglassen und den alten Namen verwenden.
Es genügt nicht, einfach nur den Namen einer Funktion oder Methode hinzuschreiben, um sie aufzurufen, sondern man muss auch Klammern dahinter setzen, also nicht
outfile.close sondern
outfile.close(). Deswegen wurde übrigens deine jeweils letzte Datei nicht beschrieben.
Das kannst du aber weglassen, wenn du deine Dateien mittels
with-Statement öffnest, denn dann werden sie automatisch wieder geschlossen.
Die Klammern um
(daten[position]) sind unnötig. Die tun absolut nichts.
Deine Namen sind allesamt nichtssagend -
daten,
position,
save - oder kryptisch -
pgn. Namen sollten sprechend und spezifisch sein, so dass man vesteht, was der Code macht.
Da gibt es nur wenige Ausnahmen:
i,
j,
k für Indizes etwa, oder
x und
y für Koordinatenpunkte.
Deine Kommentare beschreiben nicht was der Code macht, sondern was du glaubst, dass der Code macht. Kommentare sollten aber weder das eine noch das andere tun, denn mich als Leser interessiert zwar, was der Code tut, und nicht was du glaubst, dass er tut, aber was der Code tut sehe ich ja schon am Code, da brauch ich keinen Kommentar. Kommentare sollen Dinge beschreiben, die nicht offensichtlich sind. Wenn du sprechende, spezifische Namen verwendest, dann brauchst du meistens keine Kommentare. Siehe auch den Punkt oben über die Benamsung.
Relative Dateipfade können problematisch sein. Wenn dein Programm nicht in dem Verzeichnis gestartet wird, das dein Programm vermutet, dann wird es mit einem Fehler abbrechen, wenn es im aktuellen Verzeichnis kein Unterverzeichnis
In-Maschiene-PGN gibt.
Maschine schreibt man ohne
ie.
Backslashes in Strings sind ebenfalls problematisch, weil diese Sonderzeichen definieren können. Dass es bei dir funktioniert liegt nur daran, dass
\g zufällig kein Sonderzeichen ist:
Code: Alles auswählen
>>> print('>', f'a\g', '<')
> a\g <
>>> print('>', f'a\t', '<') # Tab
> a <
>>> print('>', f'a\r', '<') # Carriage Return
<a
>>> print('>', f'a\n', '<') # Newline
> a
<
Statt dessen solltest du
pathlib verwenden.
Wenn man das alles beherzigt kommt am Ende in etwa sowas heraus:
Code: Alles auswählen
from pathlib import Path
GAME_DIR_NAME = Path('In-Maschine-PGN')
for game_number, moves in enumerate(games):
print(game_number)
with open(GAME_DIR_NAME / f'game-{game_number}.pgn', 'w') as game_file:
game_file.write(moves)
Ungetestet.
In specifications, Murphy's Law supersedes Ohm's.