Python OS 符号链接和 .json.gz 文件

Python OS symlink and .json.gz files

我正在用 Python 创建符号链接。首先,我检查文件是否存在,然后创建符号链接。

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

但是,当我 运行 需要此符号链接的脚本时,它失败了。在使用 finder 检查时,我得到 The operation can’t be completed because the original item for “nodes1.json.gz” can’t be found.

我确信我有正确的路径并且正确设置了符号链接。使用 .gz 个文件有问题吗?

除非您为 os.symlink() 函数指定 dir_fd 参数,否则您需要为 srcdst 参数指定绝对路径。

symlink 路径是相对于 symlink 所在目录的。您的真实文件比当前目录高两层,但您的 symlink 仅高一层,然后再深一层。如果我为你的父目录命名,它会是这样的

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

你的 symlink 应该更深一层

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

检查 symlinks 的一个好方法是进入包含 link 的目录,然后按照它查看哪里出了问题。

td@mintyfresh ~/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
td@mintyfresh ~/tmp/deleteme $ cd aaa/bbb/simulations/project
td@mintyfresh ~/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
td@mintyfresh ~/tmp/deleteme/aaa/bbb/simulations/project $ cd ..
td@mintyfresh ~/tmp/deleteme/aaa/bbb/simulations $ cd ..
td@mintyfresh ~/tmp/deleteme/aaa/bbb $ cd project
bash: cd: project: No such file or directory