在Python中打开一个符号链接文件

3

我有一些Python代码,可以像这样打开文件并读取它...

with open("file.txt") as f:
    print(f.read())

在MacOS上,如果file.txt是一个符号链接 - Python会遵循符号链接并读取目标文件。然而,在Windows上它不会这样做 - 我该怎么实现这个功能呢?(使用Python版本3.6.5和Windows 10)重现步骤如下:
1. 在上面的DirectoryA中创建FileA.txt 2. 在DirectoryB中运行mlink FileA.txt "../FileA.txt" 3. 运行一个Python脚本,尝试从DirectoryB中的FileA.txt链接读取并打印
期望行为:
应该打印出DirectoryAFileA.txt的内容
实际行为: OSError: [Errno 22] Invalid argument: 'FileA.txt'

它会做什么? - Shadow
@Shadow 它只是爆炸了,显示文件不存在。 - Ogen
请将此问题的堆栈跟踪添加到您的问题中 - 这将有所帮助。 - Shadow
我现在无法做到,因为我没有访问Windows机器的权限。 - Ogen
你能否在问题中加上Python的版本?是2.7.x吗? - bhathiya-perera
1
@BhathiyaPerera 已完成 - Ogen
2个回答

2

出了些问题。我强烈怀疑你没有在包含file.txt的目录中运行此程序。

我使用的操作系统是Windows 10和Python 3.6。

这里我创建一个文件(使用值得信赖的记事本)。我在第一行添加了一些文本,并验证了它在第二行存在。

cd c:\
notepad test.txt
mklink other.txt test.txt
notepad other.txt

现在转到Python...

f = open("C:\\other.txt")
f.read()

这对我很有帮助。为了帮助您,需要更多详细信息,但现在看来您的问题无法重现。
现在,您已经更新了确切的步骤,我可以告诉您出了什么问题。
但是首先,请尝试在记事本(或其他任何东西)中打开该文件。
这不会打开-而是会给出文件错误。
这是因为您给出的路径。Windows使用\作为目录分隔符-但您使用/创建符号链接。此符号链接指向无效的文件名。 Python很好(跨平台),会为您转换它-但Windows不会这样做。
请再次尝试您的说明-但这次使用mklink FileA.txt“.. \ FileA.txt”

你能试试Python 2.7吗?因为那是我之前在用的版本。 - Ogen
另一个区别是我的符号链接使用相对路径(..)指向了上一级目录中的一个文件。这样做对你有用吗?也许它之所以有效是因为该链接指向了同一目录中的文件。 - Ogen
如果它产生了影响,我会非常惊讶。就标准操作而言,符号链接和实际文件一样。您需要使用可验证的示例更新您的问题-否则,我无法为您提供进一步的帮助。 - Shadow
我刚刚测试了一下,确实有所不同。在你的命令中尝试使用 mklink other.txt "../test.txt" 然后看看是否有效。当我尝试读取链接时,Python会抛出OSError错误,显示“无效参数:<我的链接名称>”。 - Ogen
@Ogen,我想我找到了问题所在。请看我的修订答案。 - Shadow
显示剩余3条评论

-1

2
我没有“.lnk”扩展名。我正在使用Windows中的“mklink”命令创建符号链接。 - Ogen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接