Einzelproblem, Datei ist da und doch nicht da

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
Benutzeravatar
Strawk
User
Beiträge: 229
Registriert: Mittwoch 15. Februar 2017, 11:42
Wohnort: Aachen
Kontaktdaten:

Hallo!
Mein Code findet die korrekte Datei und gibt sie aus; beim Öffnen aber wird gemeldet: File not found. Wie geht das zu? :)

Code: Alles auswählen

# -*- coding: utf-8 -*-
"""
Created on Sat Jan  5 11:10:27 2019

@author: Karl Kraft
"""

import os
import gpxpy

path = "data/"
files = os.listdir(path)
for i in range(len(files)):
    print(files[i])
    gpx_file = open(files[i], 'r') # gpx_file is opened for reading
    gpxdata = gpxpy.parse(gpx_file)
runfile('C:/Users/Karl Kraft/Documents/Programmierung_ausser_PHP/Python/analysis_of_geo_data/file_not_found_error_01.py', wdir='C:/Users/Karl Kraft/Documents/Programmierung_ausser_PHP/Python/analysis_of_geo_data')
Aachen.gpx
Traceback (most recent call last):

File "<ipython-input-21-c17527da6ba2>", line 1, in <module>
runfile('C:/Users/Karl Kraft/Documents/Programmierung_ausser_PHP/Python/analysis_of_geo_data/file_not_found_error_01.py', wdir='C:/Users/Karl Kraft/Documents/Programmierung_ausser_PHP/Python/analysis_of_geo_data')

File "C:\Users\Karl Kraft\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile
execfile(filename, namespace)

File "C:\Users\Karl Kraft\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)

File "C:/Users/Karl Kraft/Documents/Programmierung_ausser_PHP/Python/analysis_of_geo_data/file_not_found_error_01.py", line 15, in <module>
gpx_file = open(files, 'r') # gpx_file is opened for reading

FileNotFoundError: [Errno 2] No such file or directory: 'Aachen.gpx'
Ich programmiere erfolglos, also bin ich nicht.
eckhard
User
Beiträge: 33
Registriert: Montag 14. Dezember 2015, 10:06
Wohnort: Karlsruhe

@Strawk: Datei ist im Verzeichnis data. Du suchst Sie aber im aktuelln Verzeichnis.
Eckhard
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Die Fehlermeldung beinhaltet nicht die Zeile aus deinem Quelltext.
In der Fehlermeldung lautet die Zeile

Code: Alles auswählen

gpx_file = open(files, 'r') # gpx_file is opened for reading
in deinem Quelltext

Code: Alles auswählen

gpx_file = open(files[i], 'r') # gpx_file is opened for reading
Dort liegt auch der Fehler.

Weiter:

Bitte iteriere nicht über range() sondern direkt über files:
for file in os.listdir(path):

Benutze nicht "open" sondern benutze den with-Operator:
with open(file, "r") as gpx_file:
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

`os.listdir` liefert nur die Dateinamen, die liegen aber im Verzeichnis `data`, daher lohnt es sich, statt listdir glob zu benutzen:

Code: Alles auswählen

from glob import glob
for filename in glob("data/*"):
    with open(filename) as gpx_file:
        gpxdata = gpxpy.parse(gpx_file)
Benutzeravatar
Strawk
User
Beiträge: 229
Registriert: Mittwoch 15. Februar 2017, 11:42
Wohnort: Aachen
Kontaktdaten:

Hallo!
In eurem Forum kann man keine eckigen Klammern mit copy und paste einfügen. Im Entwurf sind sie da, in Vorschau und Thread werden sie geschluckt. Bitte den Bug fixen.
Grüße
Strawk
Ich programmiere erfolglos, also bin ich nicht.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Der Bug ist, dass Du auch den Stacktrace in [ code ]-Tags packen mußt, bitte fixen.
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Strawk: Die eckigen Klammern werden nicht geschluckt, sondern von der Forensoftware als Formatierugsanweisungen interpretiert mit [ i ] (ohne die Leezeichen) wird kursiv formatierter Text eingeleitet.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
Strawk
User
Beiträge: 229
Registriert: Mittwoch 15. Februar 2017, 11:42
Wohnort: Aachen
Kontaktdaten:

Hallo!
Okay, also jetzt nochmal. Hier der Code:

Code: Alles auswählen

import os
import gpxpy

path = "data/"
files = os.listdir(path)
for i in range(len(files)):
    print(files[i])
    gpx_file = open(files[i], 'r') # gpx_file is opened for reading
    gpxdata = gpxpy.parse(gpx_file)
Sowie der Trace:

Code: Alles auswählen

runfile('C:/Users/Karl Kraft/Documents/Programmierung_ausser_PHP/Python/analysis_of_geo_data/file_not_found_error_01.py', wdir='C:/Users/Karl Kraft/Documents/Programmierung_ausser_PHP/Python/analysis_of_geo_data')
Aachen.gpx
Traceback (most recent call last):

  File "<ipython-input-32-c17527da6ba2>", line 1, in <module>
    runfile('C:/Users/Karl Kraft/Documents/Programmierung_ausser_PHP/Python/analysis_of_geo_data/file_not_found_error_01.py', wdir='C:/Users/Karl Kraft/Documents/Programmierung_ausser_PHP/Python/analysis_of_geo_data')

  File "C:\Users\Karl Kraft\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile
    execfile(filename, namespace)

  File "C:\Users\Karl Kraft\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/Karl Kraft/Documents/Programmierung_ausser_PHP/Python/analysis_of_geo_data/file_not_found_error_01.py", line 15, in <module>
    gpx_file = open(files[i], 'r') # gpx_file is opened for reading

FileNotFoundError: [Errno 2] No such file or directory: 'Aachen.gpx'
Erbitte hilfreiche Tipps, danke!
Strawk
Ich programmiere erfolglos, also bin ich nicht.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Strawk: Du hast schon zwei Lösungen und viele hilfreiche Tipps bekommen.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Eine Möglichkeit wäre die pathlib. Ungetestet:

Code: Alles auswählen

from pathlib import Path
import gpxpy

path = Path('data')
for filename in path.glob('*.gpx'):
    with filename.open() as gpx_file:
        gpxdata = gpxpy.parse(gpx_file)
Eine andere Komplettlösung hatte dir ja auch schon Sirius3 geliefert. Weiter kann man hier nicht helfen...
Benutzeravatar
Strawk
User
Beiträge: 229
Registriert: Mittwoch 15. Februar 2017, 11:42
Wohnort: Aachen
Kontaktdaten:

Hallo!
Ja, das klappt jetzt auch zum großen Teil; durch Beherzigung eurer Ratschläge. Eine eher kurze Frage(?): Wie kann ich prüfen, ob eine GPX-Datei Zeitinformationen enthält oder nicht?
Grüße
Strawk
Ich programmiere erfolglos, also bin ich nicht.
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Strawk: Die entsprechende Methode aufrufen die das prüft. :-)
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
Strawk
User
Beiträge: 229
Registriert: Mittwoch 15. Februar 2017, 11:42
Wohnort: Aachen
Kontaktdaten:

Also sprach Salomo...
Hättest du die Güte, mir diese Methode zu nennen?
Strawk
Ich programmiere erfolglos, also bin ich nicht.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Ich denke mal, hier solltest du fündig werden....
https://github.com/tkrajina/gpxpy
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Antworten