os.symlink(src, dst)
的Python 3.7文档为Create a symbolic link pointing to src named dst.
让我们想象一下这个工作目录:
+-- nb.ipynb
+-- dir1
| +-- file1
+-- dir2
假设我想在dir2
中创建一个名为filed2
的符号链接,该链接指向我的笔记本dir1/file1
中的nb.ipynb
。
在笔记本的一个单元格中,我将放置:
import os
os.symlink('dir1/file1', 'dir2/file2')
但是,这将不起作用,这将在dir2中创建一个file2,但是当您查看该文件的属性时,其Type
为Link(broken) (inode/symlink)
,其Link target
为dir1/file1
。 Link目标是您在os.symlink中作为src放置的内容。
为了实现正确的符号链接,需要做
os.symlink('../dir1/file1', 'dir2/file2')
这意味着os.symlink(src, dest)
,src
应该包含源相对于目标的路径。
由于必须多次创建此类符号链接,因此创建了此函数:
def symlink_rel(src, dst):
rel_path_src = os.path.relpath(src, os.path.dirname(dst))
os.symlink(rel_path_src, dst)
致电
symlink_rel('dir1/file1', 'dir2/file2')
将创建正确的符号链接。在我看来,os.symlink的行为不像文档所说的那样。为什么os.symlink
需要src
作为src
相对于dst
的路径,而不是src
和dst
作为工作目录的路径?
答案 0 :(得分:1)
os.symlink('dir1/file1', 'dir2/file2')
软链接保存文件的原始位置,这意味着“ dir2 / file2”保存位置“ dir1 / file1”。当您将文件“ dir2 / file2”设为目录时,这将在目录“ dir2 /”中搜索“ dir1 / file1”,目录“ dir2 /”是“ file2”的工作目录,并且在dir2中没有名为“ dir1 / file1”的路径
os.symlink('../dir1/file1', 'dir2/file2')
当您将此文件dir2 / file2设为目录时,“ file2”的父目录为“ dir2”。 与上面相同。区别在于“ ..”意味着从您现在所在的位置进入一个目录。从该位置转到“ dir1 / file1”,这样它将起作用。
不要考虑您的工作主管,请考虑使用父级的软链接 目录并根据该位置读取位置