Schach PGN Datei splitten aufteilen

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.
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

Hallo Leute,

ich habe ein Problem mit einer Liste.
Ich öffne eine pgn Textdatei und lese Zeilenweise die Inhalte ein.
Ich möchte aber nur bestimmte Einträge in einer Liste Speichern und diese Dann abspeichern.

Ich habe schon alles mögliche versucht. Es wird mir immer nur der Letzte Eintrag ausgegeben, aber nicht die gesamte Liste
Wo liegt der Fehler ?

with open('pgn/game-8.pgn', 'r') as pgn_file:
daten=[]#liste erstellen
for line in pgn_file:

if line.find ('[Event "') == 0 and line.count('[Event "')==1 and line.find('"]') > 0 and line.count ('"]') ==1:

daten = [line.strip()] #in Liste ablegen

elif line.find ('[Site "') == 0 and line.count('[Site "')==1 and line.find('"]') > 0 and line.count ('"]') ==1:
daten = [line.strip()]# in Liste ablegen

for zahl in daten:
print(zahl)

Hier wird mit nur der Letzte Eintrag ausgegeben
[Site "St Petersburg RUS"]

So sollte es aussehen
[Event "8th RUS-CHN Summit Women Classical"]
[Site "St Petersburg RUS"]

Bis die Tage...
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@PeterL: ``daten = [line.strip()]# in Liste ablegen`` bindet `daten` an eine Liste mit genau einem Element. Was immer *vorher* an den Namen `daten` gebunden war, ist damit natürlich nicht mehr an den Namen gebunden. Du willst an der Stelle nicht immer neue Listen mit jeweils einem Element erstellen, sondern das Element an eine bereits vorhandene, vor der Schleife erstellte, leere Liste *anhängen*. Diese leere Liste erstellst Du ja sogar schon.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

Du willst an der Stelle nicht immer neue Listen mit jeweils einem Element erstellen, sondern das Element an eine bereits vorhandene, vor der Schleife erstellte, leere Liste *anhängen*. Diese leere Liste erstellst Du ja sogar schon.
---

Hallo ,ich verstehe nicht was du meinst.
Es wird immer nur ein Listeneintrag ausgegeben, ich möchte gerne alles ausgeben,
die gesamte Liste.

Wie wird das programmiert ?

Bis die Tage
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Hi PeterL,

diese Zeilen mit

Code: Alles auswählen

daten = [line.strip()] #in Liste ablegen
machen nicht das was du denkst.

Du erstellst da eine neue Liste mit einem Element.
Du möchtest dieses Element an die existierende Liste anhängen. Google doch mal was "anhängen" auf Englisch heißt und dann "Python anhängen an eine Liste".
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

Hallo, also jetzt scheint es zu laufen. Leider wird mir die Liste mit Zeilenumbruch ausgegeben.

daten.append(line)

Ergebniss:
[Event "8th RUS-CHN Summit Women Classical"]

[Site "St Petersburg RUS"]

[Date "2012.07.02"]

und
so möchte ich es ausgegeben haben

[Event "8th RUS-CHN Summit Women Classical"]
[Site "St Petersburg RUS"]
[Date "2012.07.02"]

daten.append = [line.strip()] gibt immer eine Fehlermeldung aus.
daten.append[line.strip()]
daten.append [line.strip()]

Bis die Tage
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@PeterL: Es gibt in der Python-Dokumentation ein Grundlagentutorial. Man kann nicht einfach Syntax raten und hoffen der Rechner macht was man eigentlich will. Der macht immer nur genau das was man sagt, und wenn man das syntaktisch falsch macht, oder wenn man von Objekten Operationen verlangt, die sie nicht kennen/können, dann gibt es entsprechende Fehlermeldungen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

Hallo, es schein zu laufen.

Code: Alles auswählen

 for zahl in daten:     
    print(zahl , end="")  
Jetzt erhalte ich nun das gewünschte Ergebnis.
Das Schlüsselwort end="" entfernt die Zeilenumbrüche.

[Event "8th RUS-CHN Summit Women Classical"]
[Site "St Petersburg RUS"]
[Date "2012.07.02"]
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@PeterL: `zahl` ist irgendwie nicht wirklich passend als Name.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten