windows 如何用python获取目录链接中的文件

jogvjijk  于 2023-04-07  发布在  Windows
关注(0)|答案(1)|浏览(203)

这可能是超级容易,但经过一个小时的尝试,我还没有能够找到它。
从一个名为/Database/Images/的数据库中的特定文件夹中,我手动创建了一个与Windows的文件夹链接,并将其放置在/Tests/Images中。
完成后,我在/Tests文件夹中创建了一个python脚本,并尝试使用它来访问/Tests/Images链接中的文件。
如何从链接/Tests/Images获取/Database/Images/中的数据?
问题是我不能使用os.listdir(),因为它不是一个目录,但我似乎也找不到方法来知道/Tests/Images实际上是指向/Database/Images/
到目前为止,我已经尝试了几个os函数,但

  • os.listdir()返回/Tests/Images不是目录
  • os.path.islink()返回False
  • os.path.realpath()os.path.abspath()返回/Tests/Images,而不是/Database/Images/
tjvv9vkg

tjvv9vkg1#

看起来你可能正在处理一个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)

相关问题