2017-02-24 1 views
0

ich ein Python-Programm in der Lage habe Dateien zu lesen lokal gerade fein:Python lesen: Datei nicht gefunden, wenn absoluten Pfad

Im Verzeichnis, in dem ich dieses Programm habe, gibt es eine Datei namens path_list (es ist eine Liste von Dateipfaden), und ich kann es wie so öffnen und Zugang:

test_explicit = open('path_list').read() 
print 'Reading local file gives: ' + test_explicit 

Dann wird das Programm in einer Schleife durch diese Wege zu gehen und auf jedem Weg die folgende Funktion aufrufen, Dinge zu tun, auf das, was es in der findet Versionsverzeichnis oben. Unglücklicherweise, hier, wenn ich absolute Pfade anstelle von relativen Pfaden habe, geben diese gleichen offenen/gelesenen Operationen 'Keine solche Datei oder Verzeichnis' Fehler. (Aber wenn ich ausdrücke, wohin es geht und ls dort, sehe ich die Inhalte, die ich erwarte).

Hier ist der relevante Teil meiner Code:

def getCommand(path): 

     # grab that trailing /version, strip the v, convert to int 
     split_path = path.split("/") 
     version = split_path.pop() 
     version_num = int (version[1:]) 

     # increment that number, and remake path with a fresh /v(x+1) suffix 
     version_num += 1 
     new_suffix = '/v' + str(version_num) 
     higher_file_path = '/'.join(split_path) 
     higher_file_path += new_suffix 

     finished_filename = 'finished.txt' 
     finished_filepath = os.path.join(higher_file_path, finished_filename) 

     result = open(finished_filepath).read() 
     print 'Result is: ' + result 
[more code] 

Als ich es betreibe ich einen Fehler auf der Linie erhalten mit open und read():

IOError: [Errno 2] No such file or directory: '~/scripts/test/ABC/v4/finished.txt' 

Aber wenn ich ls oder cd da ich sehe die Datei.

+0

'~' wird von der OS-Shell erweitert. Die Funktion 'read()' verwendet die Shell nicht zum Öffnen von Dateien und kann die Erweiterung nicht ausführen. Sie müssen einen Pfad, der mit einem '~' beginnt, zuerst in den absoluten Pfad konvertieren. – DyZ

+0

Ich liege falsch - das war es - danke! –

Antwort

1

Sie benötigen folgende Funktion nutzen zu erweitern '~'

os.path.expanduser(path) 

Update: In Ihrem Fall kann es gehen Sie wie folgt vor:

result = open(os.path.expanduser(finished_filepath)).read() 
+0

Vielen Dank! Ich hatte das ~ völlig übersehen. Ich habe es jetzt ersetzt und leider bekomme ich immer noch das gleiche Problem. Ich werde die Beschreibung oben aktualisieren, um diese Beule auf der Straße loszuwerden. –

1

~ ist keine gültige Verknüpfung zu /home/username/ oder /Users/username/ in Python. Sie müssen den vollständigen, erweiterten Pfad verwenden.

os.path.expanduser() könnte Ihnen hier nützlich sein.

+0

Wenn Sie versuchen zu antworten, seien Sie bitte konstruktiv. "Du wirst brauchen" ist nicht konstruktiv. – DyZ

+0

Ich verstehe die Begründung für diese Kritik nicht. Können Sie mir ein konstruktives Beispiel geben, wie ich meine Antworten in Zukunft besser formulieren kann? Zum Beispiel, wie unterscheidet sich dies deutlich von Ihrem Kommentar etwa zur gleichen Zeit, die besagt: "Sie müssen einen Pfad, der mit einem '~' beginnt, zuerst in den absoluten Pfad konvertieren." ist es die Verwendung des Wortes "müssen" vs. "brauchen"? Ich schätze Ihre Anleitung. –

+0

Sie haben Ihre Antwort geändert, um sie konstruktiv zu gestalten. – DyZ

1

Wie bereits erwähnt, Sie verwenden Shell-Sonderzeichen ~ in Ihrem Dateipfad, das vor dem Öffnen in einen echten Pfad konvertiert werden muss. Sie können auch Umgebungsvariablen im Pfad zulassen, indem Sie Folgendes tun:

+0

Vielen Dank! Ich hatte das ~ völlig übersehen. Ich habe es jetzt ersetzt und leider bekomme ich immer noch das gleiche Problem. Ich werde die Beschreibung oben aktualisieren, um diese Beule auf der Straße loszuwerden. –

+0

Ich liege falsch - das war es - danke! –

Verwandte Themen