2016-06-16 10 views
2

私は、Pythonでのシンボリックリンクを作成しています。まず、ファイルが存在するかどうかを確認し、シンボリックリンクを作成します。PythonのOSへのシンボリックリンクと.json.gzファイル

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") 

ただし、このシンボリックリンクを必要とするスクリプトを実行すると、そのスクリプトは失敗しました。ファインダーでの検査について私は右のパスを持っているし、それが正しくシンボリックリンクを設定していると確信してThe operation can’t be completed because the original item for “nodes1.json.gz” can’t be found.

を取得します。ファイル.gzを使用する際に問題がありますか?

答えて

1

シンボリックリンクのパスは、シンボリックリンクが住んでいるディレクトリに対して相対的です。あなたの実際のファイルは現在のディレクトリから2つ上のレベルですが、シンボリックリンクは1つ上のレベルになり、次に深いレベルになります。私はあなたの親ディレクトリの名前を構成している場合、それはあなたのシンボリックリンクが1以上のレベルでなければなりません

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

ようなものになるだろう深い

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

シンボリックリンクをチェックするための良い方法は、ディレクトリ保持に行くことですそのリンクをたどってそれがどこに間違っているのかを確認してください。

[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

ありがとうございます。 Flowfreeは正しい方向に向いていましたが、あなたの説明は解決策をもたらし、私は今理解しています!私は 'tree'も発見しました。非常に便利です! – LearningSlowly

1

os.symlink()関数に引数dir_fdを指定しない限り、srcdst引数の絶対パスを指定する必要があります。

+0

ああ!私は '2.7'を使っていますが、これは' 3'のみたいです。私は解決策を見つけようとしています。 – LearningSlowly

関連する問題