2017-01-24 4 views
0

Ich versuche, eine Datei zu öffnen, die als Teil ihres Namens einen zufälligen Zeitstempel hat. Der größte Teil des Dateinamens ist bekannt, zB filename = 2017_01_23_624.txt ist mein Testname. Das Datum und die Zahlen sind der Teil, den ich durch etwas Unbekanntes zu ersetzen versuche, da es sich ändern wird. Meine Frage bezieht sich auf das Öffnen einer vorhandenen Datei und das Erstellen eines neuen Dateinamens. Die Dateinamen werden von einem separaten Programm erstellt und ich muss sie öffnen können. Ich möchte sie auch ändern, sobald sie geöffnet sind. Ich habe versucht, die Dateinamen-Zeichenfolge wie folgt zu erstellen, aber ungültige Syntax erhalten.Wie öffne ich eine Datei in Python mit Variablennamen?

+0

Mögliches Duplikat (http://stackoverflow.com/questions/14622314/python-inserting-variable-string-as-file-name) – bzimor

+0

Nicht ganz [Python-Variable Zeichenfolge als Dateinamen einfügen]. Meine Dateinamenszeichenfolge ist komplizierter als diese. – Dindsy

Antwort

0

Sie können eine Datei mit einem partiellen Dateinamen, der einen Platzhalter enthält, nicht öffnen, damit sie übereinstimmt. Was Sie tun müssten, sehen Sie sich alle Dateien in Ihrem Verzeichnis an und wählen Sie diejenige, die am besten passt.

Einfaches Beispiel:

import os 

filename = "filename2017_" # known section 
direc = r"directorypath" 

matches = [ fname for fname in os.listdir(direc) if fname.startswith(filename) ] 
print(matches) 

Sie können jedoch verwenden, um den glob Modul (Dank bzimor) nach Mustern Ihre Dateien entsprechen. Weitere Informationen finden Sie unter glob docs.

Ähnlich wie bei der ersten Lösung erhalten Sie immer noch eine Liste von Dateinamen zur Auswahl, um dann zu öffnen. Aber mit dem Modul glob können Sie Ihre Dateien genauer zuordnen, wenn Sie dies benötigen. Es hängt alles davon ab, wie eng es sein soll.

+0

Oder einfacher Weg verwendet 'Glob' mit Platzhaltern für Dateinamen. Fügen Sie diese 'glob' Modulversion hinzu – bzimor

+0

Danke. Ich dachte, ich hätte das vielleicht machen müssen, aber ich kannte die Verzeichnisbefehle nicht. Ich habe es fast, aber meine Ausgabe für den Dateinamen ist wie folgt. es wird mit eckigen Klammern und 'quotes.C: \ TEMP \ Python> Python test.py [' testfile2017_01.txt '] Traceback (jüngste Aufforderung zuletzt): File "test.py", Zeile 9, in fo = öffnen (entspricht) TypeError: ungültige Datei: ['testfile2017_01.txt'] – Dindsy

+0

@Dindsy 'matches' ist eine Liste, Sie müssen einen Dateinamen daraus auswählen. Siehe auch aktualisierte Antwort. Könnte das 'glob' Modul eine bessere Wahl finden. –

Verwandte Themen