ubuntuusers.de

Python - os.path.splitext() Problem

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

jazzdd

Avatar von jazzdd

Anmeldungsdatum:
5. November 2007

Beiträge: 200

Moin,

folgendes Problem. Ich nutze splitext() um Extension und Dateiname zu trennen. Das funktioniert super, wenn man den Path-String direkt vorgibt. Es funktioniert nicht, wenn man die Datei mit dem FileDialog auswählt. Und das obwohl beide Male eigentlich der PfadString an splitext() weitergegeben wird.

Miniprogramm:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# main.py
#!/usr/bin/python

import sys
from PyQt4 import QtCore, QtGui
import os.path

def main():
	app = QtGui.QApplication(sys.argv)

	afd = QtGui.QFileDialog()
#	afileN = "/home/jazz/Entwicklung/brief_latex/tex/brief.tex"
	afileN = afd.getOpenFileName()
	print afileN
	print os.path.splitext(afileN)

	sys.exit(app.exec_())

if __name__ == '__main__':
	main()

und konsolenausgabe für den Dialog-Fall:

  File "/usr/lib/python2.6/posixpath.py", line 95, in splitext
    return genericpath._splitext(p, sep, altsep, extsep)
  File "/usr/lib/python2.6/genericpath.py", line 91, in _splitext
    sepIndex = p.rfind(sep)
AttributeError: rfind

Hat jemand ne Idee woran das liegen könnte?

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Bitte aktiviere die Python-Hervorhebungen, wenn du Python-Code postet. Das aktiviert auch die Anzeige der Zeilennummern, und würde es mir erleichtern, mich auf die Zeile print afileN zu beziehen. Ersetze diese mal durch print repr(afileN), dann siehst du, welchen Datentyp afileN hat, und warum der Aufruf von .rfind() nicht funktioniert.

PEP 8 empfiehlt übrigens vier Leerzeichen anstelle von Tabulatoren für die Einrückung. Zudem sind weder afileN noch afd Beispiele guter Namensgebung.

jazzdd

(Themenstarter)
Avatar von jazzdd

Anmeldungsdatum:
5. November 2007

Beiträge: 200

Moin,

ja sorry die Hervorhebungen hatte ich vergessen.

Die Namensgebung ist nur wegen dem Beispiel so komisch, da ich das eigentlich nur zwischen bestehendem Code ausprobiert hatte und jetzt einfach rauskopiert habe.

Ich nutze eigentlich viel lieber Tabulatoren, aber das ist eh Ansichtssache.

So nun zum eigentlichen Problem. Da ich noch ziemlicher Python Neuling bin, nutzt mir die Angabe, dass der Rückgabewert des FileDialogs ein PyQt4.QtCore.QString ist und ein Normalerstring bei repr() nur in Anführungsstrichel gekleidet wird, nicht wirklich viel.

Kannst du mir vllt noch einen Tipp geben, was ich mit der Angabe anfangen kann und wie ich splitext trotzdem nutzen könnte?

EDIT: Ok habs selber rausgefunden: Funktion str()

Danke

Jazz

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

Besser unicode(), da es ansonsten bei Dateinamen mit Nicht-ASCII-Zeichen zu Problemen kommt. Das ist aber ein Thema für sich.

Antworten |