2016-06-08 6 views
1

Dies ist, was ich tue. Ich nehme einen Text aus einem Ordner, modifiziere diesen Text und schreibe ihn in einen anderen Ordner mit einem geänderten Dateinamen. Ich versuche den Dateinamen als Variable festzulegen. Leider dies geschieht:Fehler beim Aufteilen der Datei Pfad Zeichenfolge von/in Python

import os 
import glob 
path = r'C://Users/Alexander/Desktop/test/*.txt' 
for file in glob.glob(path): 
    name = file.split(r'/')[5] 
    name2 = name.split(".")[0] 
    print(name2) 

Ausgang: test \ indillama_Luisa_testfile

Der Dateiname ist 'indillama_Luisa_testfile.txt' wird gespeichert in einem Ordner auf meinem Desktop 'Test' genannt.

Python enthält den 'Test' im Dateinamen. Wenn ich versuche, den Namen bei [6] zu teilen, heißt das, dass der Index außerhalb des Bereichs liegt. Ich benutze Regex und nehme an, dass es '/ *' als einzelne Einheit liest und nicht als Schrägstrich im Dateiverzeichnis.

Wie bekomme ich den Dateinamen?

Antwort

1

Sie können durch den OS Pfadseparator aufgeteilt:

import os 
import glob 

path = r'C://Users/Alexander/Desktop/test/*.txt' 
for file in glob.glob(path): 
    name = file.split(os.path.sep)[-1] 
    name2 = name.split(".")[0] 
    print(name2) 
+0

Das hat funktioniert, danke! Aber ich bin mir nicht sicher, wie es funktioniert. Wie teilt os.path.sep die Zeichenfolge? Und warum die -1 für die Listenposition? – Wangana

+0

@AlexR. os.path.sep ist die Zeichenfolge, die das aktuelle Betriebssystem zum Trennen von Dateipfaden verwendet. Das [-1] bedeutet nur "das letzte Element in der Liste", in diesem Fall ist es der Dateiname. – Natsukane

1
import os 
import glob 
path = r'C://Users/Alexander/Desktop/test/*.txt' 
for file in glob.glob(path): 
    name = os.path.basename(file) 
    (path, ext) = os.path.splitext(file) 
    print(ext) 

os.path.basename() wird den Dateinamen Teil des Pfades extrahieren. os.path.splitext() gibt ein Tupel zurück, das den Pfad und die abgespaltene Erweiterung enthält. Da das Ihr Beispiel zu drucken schien, habe ich das in meiner Antwort getan.

Für die Portabilität ist es normalerweise sicherer, die integrierten Pfadmanipulationsroutinen zu verwenden, anstatt selbst zu versuchen.

+0

Hallo, können Sie Ihre Antwort ein wenig erklären? In der Überprüfungswarteschlange aufgetaucht, wie es nur Code-Antworten tun. Vielen Dank! – Will

+1

@Will: Danke für die Erinnerung. Ich hätte es besser wissen sollen. :) –

+0

Super, danke für die Erklärung! :) – Will

0

können Sie os.listdir(path) verwenden, um alle Dateien in einem Verzeichnis aufzulisten. Dann iterieren Sie über die Liste, um den Dateinamen jeder Datei zu erhalten.

for file in os.listdir(path): 
    name2 = file .split(".")[0] 
    print(name2)