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

Opening a file which is a symlink in Python

我有一些 python 代码可以打开一个文件来读取它...

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

在 MacOS 上,如果 file.txt 是符号 link - Python 将跟随符号 link 并读取目标文件。但是,在 Windows 上它不会这样做 - 我怎样才能做到这一点?

(使用 Python 版本 3.6.5 和 Windows 10) 重现步骤。

  1. DirectoryB
  2. 之上的 DirectoryA 中创建 FileA.txt
  3. 里面 DirectoryB, 运行 mlink FileA.txt "../FileA.txt"
  4. 运行 一个 Python 脚本,它试图从 DirectoryB
  5. 中的 FileA.txt link 读取和打印

预期行为:

应该打印DirectoryA里面的FileA.txt的内容

实际行为:

OSError: [Errno 22] Invalid argument: 'FileA.txt'

我不做 MS Windows。但这可能会有所帮助:http://winshell.readthedocs.io/en/latest/shortcuts.html

您的 MS Windows 版本真的支持符号链接吗?或者您正在处理这些“快捷方式”(Shell 链接)?它真的有 .lnk 扩展名吗?

其他地方出了问题。我强烈怀疑你不是来自包含 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"