File öffnen (Spezieller Fall)

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
StitZle
User
Beiträge: 7
Registriert: Dienstag 26. Juni 2018, 15:26

Hallo liebe Python Freunde,

ich habe ein Problem.

Ich möchte eine File öffnen die von einem Spiel generiert wird.
Diese File wird bei jedem Neustart oder Start des Spiels neu angelegt.

Dabei ist das Problem das die Dateien so aussehen:

Journal7627239.log
Journal846384.log
Journal7252432.log

Ist es möglich eine Datei zu öffnen, indem man nur den Anfang des Filenames angibt ?

Also zum Beispiel:

Code: Alles auswählen

journal = open("Journal" + * + ".log")


Dabei dachte ich das, dass Sternchen für den Rest des Filenames steht.

ich lösche immer alle Files in dem Ordner bevor eine neue vom Spiel erstellt wird.
Leider habe ich keinen Einfluss auf den Namen.

Ich hoffe Ihr könnt mir weiterhelfen

Niclas
serki92
User
Beiträge: 6
Registriert: Dienstag 13. November 2018, 08:35

Liebe Grüße

Serki92 :)
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Dafür ist glob() gedacht:

Code: Alles auswählen

from glob import glob

alle_treffer = glob("Journal*.log")
erster_treffer = glob("Journal*.log")[0]
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@snafu: Wobei das `erster_` in `erster_treffer` keinerlei besondere Bedeutung hat, das ist halt *irgendein* Treffer. Wenn man die Treffer nach irgendeinem Kriterium sortiert haben möchte, dann muss man das selber explizit tun.

Ansonsten ginge auch ``some_path = next(glob.iglob('Journal*.log'))`` wenn man die Liste nicht braucht oder aufbauen möchte. Und einem egal ist welche Datei man öffnet wenn mehr als eine vorhanden ist.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Der Fragestellung habe ich entnommen, dass nur ein Treffer möglich ist und es einfach um den exakten Dateinamen geht. iglob() ist auch möglich, hatte ich aber nicht genannt, damit es nicht zu komplex wird für einen Anfänger. Kann man aber natürlich auch nehmen, wenn es auf die Performance ankommt.
StitZle
User
Beiträge: 7
Registriert: Dienstag 26. Juni 2018, 15:26

Vielen Dank an alle!

Ich habe es hinbekommen.

ED_journal_file = glob.glob("Journal*.log")[0]

Hat mir sehr geholfen

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

@StitZle: Wobei der Name aus drei Gründen nicht passt: a) Er hält sich nicht an die Namenskonventionen: klein_mit_unterstrichen für alles ausser Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). b) Er enthält mit ED einen kryptischen Präfix. c) `_file` ist keine gute Idee für etwas das *keine* Datei sondern ein Datei*name* ist. Von etwas das `*_file` heisst, würde man erwarten das es beispielsweise `read()`/`write()`/`close()` als Methoden auf dem Objekt gibt.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten