2016-06-16 10 views
2

Ich erstelle einen Symlink mit Python. Zuerst überprüfe ich, ob die Datei existiert und dann den Symlink erstellt.Python OS Symlink und .json.gz Dateien

import os 
project = 'test' 

if os.path.isfile("../../project/json/nodes1.json.gz"): 
    os.symlink("../../project/json/nodes1.json.gz","../simulations/"+project+"/nodes1.json.gz") 

Allerdings, wenn ich ein Skript ausgeführt, das diesen Symlink erforderlich, scheiterte es. Bei der Inspektion mit Finder bekomme ich The operation can’t be completed because the original item for “nodes1.json.gz” can’t be found.

Ich bin sicher, dass ich die richtigen Pfade habe und es ist korrekt den Symlink einstellen. Gibt es ein Problem mit .gz Dateien?

Antwort

1

Symlink-Pfade sind relativ zu dem Verzeichnis, in dem sich der Symlink befindet. Ihre reale Datei ist zwei Ebenen höher als das aktuelle Verzeichnis, aber Ihr Symlink ist nur eine Ebene höher und dann eine zusätzliche Ebene tief. Wenn ich Namen für die übergeordnete Verzeichnisse zu machen, wäre es so etwas wie

current directory  aaa/bbb/ccc 
real file    aaa/project/json/nodes1.json.gz 
symlink    aaa/bbb/simulations/project/nodes1.json.gz 

Ihre Symlink sollte eine weitere Ebene sein sein tief

../../../project/json/nodes1.json.gz 

Ein guter Weg, Symlinks zu überprüfen ist, in das Verzeichnis Halte gehen den Link und dann folgen, um zu sehen, wo die Dinge schief gehen.

[email protected] ~/tmp/deleteme $ tree 
. 
└── aaa 
    ├── bbb 
    │   ├── ccc 
    │   └── simulations 
    │    └── project 
    │     └── nodes1.json.gz -> ../../project/json/nodes1.json.gz 
    └── project 
     └── json 
      └── nodes1.json.gz 

7 directories, 2 files 
[email protected] ~/tmp/deleteme $ cd aaa/bbb/simulations/project 
[email protected] ~/tmp/deleteme/aaa/bbb/simulations/project $ ls -l 
total 0 
lrwxrwxrwx 1 td td 36 Jun 16 12:06 nodes1.json.gz -> ../../project/json/nodes1.json.gz 
[email protected] ~/tmp/deleteme/aaa/bbb/simulations/project $ cd .. 
[email protected] ~/tmp/deleteme/aaa/bbb/simulations $ cd .. 
[email protected] ~/tmp/deleteme/aaa/bbb $ cd project 
bash: cd: project: No such file or directory 
+0

Vielen Dank für die Beschreibung. Flowfree hat mich in die richtige Richtung gelenkt, aber deine Erklärung brachte eine Lösung und ich verstehe jetzt! Ich entdeckte auch 'Baum', sehr nützlich! – LearningSlowly

1

Sofern Sie nicht das dir_fd Argument an die os.symlink() Funktion angeben, müssen Sie für beide src und dst Argument den absoluten Pfad angeben.

+0

Ah! Ich benutze '2.7', dies scheint nur für' 3' zu sein. Ich versuche eine Lösung zu finden. – LearningSlowly