Problem mit Backslash Verdoppellung

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
Peter1977
User
Beiträge: 86
Registriert: Mittwoch 4. September 2013, 14:59

Hallo,

Habe ein kleines Problem mit der Verdoppellung der Backslashes.

Code: Alles auswählen

def abspielen(self):
        # Dateiname aus Tabelle
        indexes = self.tbl_filme.selectionModel().selectedRows(6)
        for index in indexes:
            Datei=self.tbl_filme.itemFromIndex(index).text()
            
        # Datei Endung
        Laenge=len(Datei[:-4])
        Endung=Datei[Laenge:]
        
        if Endung==".nrg" or Endung==".iso":
            pass
            # Behandlung für Virtuelles Laufwerk
        else:
            # Direkt Startbare Dateien
            # VLC Player wird gegen Eintrag in DB gewechselt
            VLC="C:\Program Files\VideoLAN\VLC\\vlc.exe"
            
            # Verzeichniss aus Tabelle
            indexes = self.tbl_filme.selectionModel().selectedRows(5)
            for index in indexes:
                Verzeichniss=self.tbl_filme.itemFromIndex(index).text()
            
            # Verzeichniss und Datei name Zusammensetzen
            Ausfuhr=Verzeichniss + Datei
            
            Komplett='"%s" "%s"'%(VLC,Ausfuhr)
            print("VLC Player:",VLC)
            print("Datei Ausführen:",Ausfuhr)
            print("Komplett:",Komplett)
            os.startfile(Komplett)
Das Verzeichniss und der Dateiname werden aus einer QTableWidget gelesen
dann auf die Datei endung geprüft.
dann das Verzeichniss für den VLC Player zugewiesen

Die einzelnen sachen in der Python Shell ausgeben
VLC Player: C:\Program Files\VideoLAN\VLC\vlc.exe
Datei Ausführen: \\192.168.1.250\new_file_structure\Video Filme\Eingetragene_Filme\0015_Starship_Troopers.avi
Komplett: "C:\Program Files\VideoLAN\VLC\vlc.exe" "\\192.168.1.250\new_file_structure\Video Filme\Eingetragene_Filme\0015_Starship_Troopers.avi"
und dann das ganze über os.startfile starten hier kommt dann der Traceback
Traceback (most recent call last):
File "Z:\ProgrammEntwicklung\Python3.4\frp_verwaltung\module\medien.py", line 309, in abspielen
os.startfile(Komplett)
FileNotFoundError: [WinError 2] Das System kann die angegebene Datei nicht finden: '"C:\\Program Files\\VideoLAN\\VLC\\vlc.exe" "\\\\192.168.1.250\\new_file_structure\\Video Filme\\Eingetragene_Filme\\0015_Starship_Troopers.avi"'
wo plötzlich die Backslashes verdoppelt sind

Die Angaben stimmen die Ausgabe unter Komplett habe ich in die Eingabeaufforderung kopiert und die Funktioniert

wo habe ich jetzt noch einen Denkfehler?

mfg Peter
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Peter1977: statt `os.startfile` solltest Du hier `subprocess.call` verwenden.

`Datei` wird in Zeile 5 in jedem Schleifendurchgang überschrieben, warum also die Schleife?
Dateiendungen bekommt man mit `os.path.splitext` dieser magische Index -4 ist also unnötig. Auch kennst Du ja anscheinend die Möglichkeit mit negativen Indizes vom Ende her zu zählen, also warum `Laenge`.
Pfade setzt man mit `os.path.join` zusammen.

Code: Alles auswählen

def abspielen(self):
        # Dateiname aus Tabelle
        indexes = self.tbl_filme.selectionModel().selectedRows(6)
        Datei=self.tbl_filme.itemFromIndex(indexes[-1]).text()
           
        # Datei Endung
        Endung = os.path.splitext(Datei)[1]
       
        if Endung in (".nrg", ".iso"):
            pass
            # Behandlung für Virtuelles Laufwerk
        else:
            # Direkt Startbare Dateien
            # VLC Player wird gegen Eintrag in DB gewechselt
            VLC=r"C:\Program Files\VideoLAN\VLC\vlc.exe"
           
            # Verzeichniss aus Tabelle
            indexes = self.tbl_filme.selectionModel().selectedRows(5)
            Verzeichniss=self.tbl_filme.itemFromIndex(indexes[-1]).text()
           
            Ausfuhr = os.path.join(Verzeichniss, Datei)
           
            print("VLC Player:",VLC)
            print("Datei Ausführen:",Ausfuhr)
            subprocess.call([VLC, Ausfuhr])
Peter1977
User
Beiträge: 86
Registriert: Mittwoch 4. September 2013, 14:59

Danke,

das mit dem for war das einzige was ich gefunden habe im Netz beim Suchen.

Das os.path.splitext habe ich nicht gefunden habe nach reinen String Operationen gesucht

mfg Peter
Antworten