Fehlerhafter Dateipfad für Bild

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
Spedex
User
Beiträge: 54
Registriert: Mittwoch 29. Januar 2020, 03:27

Hey, ich würde gerne ein Bild aufrufen.
Dazu verwende ich folgendes Programm:

Code: Alles auswählen

...
from PIL import Image
...
mainimage = Image.open("MapGanzRoh.png")
...
Dabei entsteht jedoch folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "c:/Users/xx/Documents/Python/gui2/gui2.py", line 7, in <module>
    mainimage = Image.open('MapGanzRoh.png')
  File "C:\Users\xx\AppData\Local\Programs\Python\Python38-32\lib\site-packages\PIL\Image.py", line 2809, in open
    fp = builtins.open(filename, "rb")
FileNotFoundError: [Errno 2] No such file or directory: 'MapGanzRoh.png'
Nun kann man es auch probieren indem man den kompletten Pfad angibt:

Code: Alles auswählen

...
from PIL import Image
...
mainimage = Image.open("C:\Users\xx\Documents\Python\gui2\MapGanzRoh.png")
...
Dabei erscheint jedoch folgende Fehlermeldung:

Code: Alles auswählen

  File "c:/Users/xx/Documents/Python/gui2/gui2.py", line 7
    mainimage = Image.open("C:\Users\xx\Documents\Python\gui2\MapGanzRoh.png")
                           ^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
Woran kann das liegen?
LG Spedex
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du musst dafuer raw-Strings nehmen, weil "\u" eben eine Unicode-Sequenz einlaeutet. Also

r"C:\mein\pfad"

oder

"C:/mein/pfad"

weil Windows auch / als Pfadtrenner akzeptiert.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Das Arbeitsverzeichnis ist eben nicht das Verzeichnis in dem die Datei gui2.py bzw das Bild liegt.
Daher mußt Du erst den Pfad der Python-Datei ermitteln und daraus den Pfad zum Bild zusammenbauen:

Code: Alles auswählen

from pathlib import Path
BASEPATH = Path(__file__).parent
...
mainimage = Image.open(BASEPATH / "MapGanzRoh.png")
Spedex
User
Beiträge: 54
Registriert: Mittwoch 29. Januar 2020, 03:27

Alles klar. Vielen Dank, jetzt funktioniert es.
Wenn die Software allerdings von anderen PC genutzt werden soll, stimmt der vollständige Pfad ja nicht mehr. Wie wird das denn dann gelöst?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hat dir doch Sirius3 gezeigt. Liest du die Antworten nicht? Schien auch schon bei dem Monotonic Thema so.
Spedex
User
Beiträge: 54
Registriert: Mittwoch 29. Januar 2020, 03:27

Selbstverständlich lese ich mir die Antworten durch. Wusste nicht, dass das die Lösung für mein Problem ist.
Spedex
User
Beiträge: 54
Registriert: Mittwoch 29. Januar 2020, 03:27

Sirius3 hat geschrieben: Montag 3. Februar 2020, 18:49 Das Arbeitsverzeichnis ist eben nicht das Verzeichnis in dem die Datei gui2.py bzw das Bild liegt.
Daher mußt Du erst den Pfad der Python-Datei ermitteln und daraus den Pfad zum Bild zusammenbauen:

Code: Alles auswählen

from pathlib import Path
BASEPATH = Path(__file__).parent
...
mainimage = Image.open(BASEPATH / "MapGanzRoh.png")
Das heißt in BASEPATH wird der Path der Python-File gespeichert und ich kann dann mit / "xxx" etwas hintendranhängen, um ein Verzeichnis anzugegeben, ist das so richtig?
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Ja. Solche Fragen kannst Du einfach durch ausprobieren und Dokumentation lesen beantworten.
Antworten