RAW string in os.path

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
Ernie1412
User
Beiträge: 161
Registriert: Freitag 10. Januar 2020, 20:38

ich möchte aus einem QTtextWidgets gelesene daten an os.path übergeben um damit was zu laden.
datei.mp4 hab ich im TextWidget ausgewählt und möchte die Laden bzw datei Infos erhalten.
nur ich kriege das nicht hin aus dem currentItem ein raw string zu machen
hat einer ein Tip für mich ?
normpath geht nicht bzw .os hat die funktion nicht
r"...." geht auch nicht
habs schon mit .format("raw",datei) versucht.
als copy/paste geht es per Print(datei)
aber die "datei" variable mag os.path nicht

Danke
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich habe dir dazu schon was in deinem anderen Thread gesagt. RAW strings sind nicht was du glaubst was sie sind und haben mit dem Problem hier nichts zu tun.

Gibt es Fehlermeldungen die du bekommst? Wie genau sehen die aus?
Ernie1412
User
Beiträge: 161
Registriert: Freitag 10. Januar 2020, 20:38

Traceback (most recent call last):
File "c:/Users/wkuh/Documents/Python/MeinProgramm/Ordner_Ausgabe.py", line 76, in lWdgPressed
self.FileDetails(DIR+"\\"+ mp4file)
File "c:/Users/wkuh/Documents/Python/MeinProgramm/Ordner_Ausgabe.py", line 125, in FileDetails
AFile = AFolder.ParseName(os.path.basename(mp4file))
AttributeError: 'NoneType' object has no attribute 'ParseName'

beim 1. Post hab ich nicht gesehen das man nochmal draufschaut bis es tatsächlich raus ist.
dachte ich hätte es nicht gesendet

naja .os will doch ein raw string haben.
wenn ich mp4file=r"C:\\video.mp4" mache gehts
hab ich den gleichen ausdruck aus einem TextWidget gehts nicht
hab schon überlegt alles was ich in einem DIR hab in einer Matrix Variablen datei zu packen mit Dateigröße usw.
anstatt wie jetzt in einem TextWidget
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dein Fehler ist aber doch ein ganz anderer. AFolder ist None. Keine Ahnung woher das kommt. Aber was für restliche Argumente da übergeben werden ist in dem Moment eh irrelevant.

Und woher bitte hast du “os will einen raw string haben “? Das stimmt schlicht nicht. Nur weil man unter Windows wegen der \ als Pfadtrenner gerne raw strings benutzt wenn man Pfade hinschreibt - dann sind das am Ende immer noch ganz normale strings. Es gibt keine raw strings zur Ausführung- nur beim parsen von Quellcode.
Ernie1412
User
Beiträge: 161
Registriert: Freitag 10. Januar 2020, 20:38

r=raw meine Idee
nur wenn ich das mit r"bla.mp4" übergebe ladet er es
aber sobald ich das aus ein texWigdet habe gehts nicht

import os
import win32com.client
from pathlib import Path


def GetID3Tags(mp3file):

TheShell = win32com.client.gencache.EnsureDispatch('Shell.Application',0)
AFolder = TheShell.NameSpace(os.path.dirname(mp3file))
AFile = AFolder.ParseName(os.path.basename(mp3file))


print ("Artist Name : " + AFolder.GetDetailsOf(AFile,0))
print ("Album : " + AFolder.GetDetailsOf(AFile,1))

DIR=r'bla.mp4'
GetID3Tags(DIR)

so gehts
aber wie gesagt nicht aus einem Widgets
da kann ich mit replace alles genau so machen wie gewünscht
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hast du dir mal ausgeben lassen, was der wirkliche Inhalt von mp3file ist? Und das Ergebnis von dirname darauf?

Abgesehen davon das man id3 tags in Python auch leichtgewichtiger extrahieren kann.
Ernie1412
User
Beiträge: 161
Registriert: Freitag 10. Januar 2020, 20:38

ja hab ich
ist für meine mp4 sammlung
er listet mir die filedetails wie spieldauer Bildhöhe und breite usw. aus
wens klappen würde nur. ist ja recht wenig code
ich finde da mediainfo viel zu kompliziert oder dieses exiftool
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich glaube du hast mich missverstanden. Du GLAUBST in der variable mp3file steht das gleiche wie der hardkodierte String. Ich bezweifele das. Was also ist der wirklich Inhalt dieser Variable? Das hat nichts mit dem mp3 file selbst zu tun.
Ernie1412
User
Beiträge: 161
Registriert: Freitag 10. Januar 2020, 20:38

Datei wurde als Modul aufgerufen
Ich stehe in der Datei: DB
D:/Filme\Nomis - Die Nacht des Jägers (2018).mp4
Traceback (most recent call last):
File "c:/Users/wkuh/Documents/Python/MeinProgramm/Ordner_Ausgabe.py", line 78, in lWdgPressed
self.FileDetails(mp4file)
File "c:/Users/wkuh/Documents/Python/MeinProgramm/Ordner_Ausgabe.py", line 126, in FileDetails
AFolder = TheShell.NameSpace(os.path.normpath().dirname(mp4file))
TypeError: normpath() missing 1 required positional argument: 'path'

jetzt kommt ne andere fehlermeldung, weil ich gerade am testen bin.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist immer noch nicht worum ich dich gebeten habe. Ein simples print(mp3file) vor der Verwendung mit dirname etc genügt.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ach so, das normpath ist so kompletter Unfug. Das muss ein Argument bekommen. Und nicht per Salzstreuer in den Code eingebracht werden.
Ernie1412
User
Beiträge: 161
Registriert: Freitag 10. Januar 2020, 20:38

D:/Filme\Nomis - Die Nacht des Jägers (2018).mp4
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das sieht wegen der Mischung der slashes komisch aus. Woher kommt das?
Ernie1412
User
Beiträge: 161
Registriert: Freitag 10. Januar 2020, 20:38

for root,dir,files in os.walk(dname): dname = DIRECTORY
for filename in files:

root = /
wenn ich root (= DIRectory ) und filesname mit os.pash.join zuzammenfüge kommt das bei rum
join = \ aber nur zwischen root und filename
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist alles kein Code, sondern irgendwas verhackstücktes. Damit kann man nichts anfangen. Deine ursprüngliche Frage ist beantwortet - es gibt keine Umwandlung in raw strings. Dein Code erzeugt einfach nicht den Pfad, den du denkst das du ihn hast. Der Fehler liegt also irgendwo anders. Wenn du da weiter Hilfe willst, wirst du dich mehr ins Zeug legen müssen. Mit echtem Code, in den dazugehörigen Tags, mit dazugehörigen Fehlermeldungen.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

@Ernie1412: Variablen- und Funktionsnamen schreibt man in Python klein_mit_unterstrich. Die Namen von Klassen CamelCase. Die von dir verwendete Schreibweise von Variablen, insbesondere mit einem sinnfreien "The" oder "A" vorweg, ist für den Leser nur verwirrend.

Ich würde eine entsprechende Bibliothek einsetzen um die Tags auszulesen.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Es scheint auch noch nicht angekommen zu sein, dass raw-strings eine reine Schreibweise im Python-Sourcecode sind.

Code: Alles auswählen

>>> '\\\u00fc' == '\\ü' == r'\ü'
True
Intern ist das für Python alles identisch.
Antworten