这可能超级简单,但是经过一个小时的尝试,我还是找不到它。
从名为
/Database/Images/
的数据库中的特定文件夹,我手动创建了一个与Windows的文件夹链接并将其放置在/Tests/Images
.
完成后,我在
/Tests
文件夹中创建了一个 python 脚本,我试图用它来访问该 /Tests/Images
链接中的文件。
如何从链接
/Database/Images/
获取/Tests/Images
内的数据?
问题是我不能使用
os.listdir()
,因为它不是一个目录,但我似乎也无法找到知道/Tests/Images
实际上指向/Database/Images/
的方法
到目前为止我已经尝试了几个
os
功能但是
os.listdir()
返回 /Tests/Images
不是目录os.path.islink()
返回 Falseos.path.realpath()
和 os.path.abspath()
返回 /Tests/Images
,而不是 /Database/Images/
看来您可能正在处理 Windows 快捷方式 (.lnk) 文件,而不是符号链接(我将在后面的答案中提到如何制作它)。您提到的 os 模块功能旨在使用符号链接,而不是 Windows 快捷方式。
您可以使用
pylnk3
包使用 Windows 快捷方式。您可以使用 pip 安装它:pip install pylnk3
。这是您如何使用它的示例:
import os
import pylnk3
def get_shortcut_target(shortcut_path):
with open(shortcut_path, "rb") as f:
lnk = pylnk3.parse(f)
return lnk.relative_path
shortcut_path = r"C:\Tests\Images.lnk" # This should be the path to your shortcut
target_path = get_shortcut_target(shortcut_path)
print(f"Target path: {target_path}")
print("Files in target directory:")
print(os.listdir(target_path))
此脚本定义了一个函数
get_shortcut_target()
,它使用pylnk3
从Windows快捷方式文件中解析目标路径。然后,您可以使用 os.listdir()
与目标路径来列出目标目录中的文件。
如果要创建符号链接而不是Windows快捷方式,可以使用命令提示符中的
mklink
命令(具有管理员权限)或Python中的os.symlink()
函数。
创建符号链接的语法是
mklink /D link_path target_path
。 /D 标志用于创建目录符号链接。例如:
mklink /D C:\Tests\Images C:\Database\Images
这个命令会在
C:\Tests
目录下创建一个名为Images的符号文件夹链接,指向C:\Database\Images
目录。
这是使用 python 创建符号链接的方法(请记住,您需要以管理员权限运行它,否则您将获得
PermissionError
)
import os
link_path = r"C:\Tests\Images"
target_path = r"C:\Database\Images"
os.symlink(target_path, link_path, target_is_directory=True)