如何使用绝对路径访问网络位置?

How to access network locations using absolute paths?

现在我在网络中有一个文件夹(test),我想读取这个文件夹中的所有文件,ip是11.110.100.1,我可以通过这个路径找到所有文件:

file_path = r"\11.110.100.1\test\"
for file_name in os.listdir(file_path):
  print(file_name)

但是,我对此感到困惑file_path,我的意思是,它总是真实的,

'C:/temp/parts'

r'C:\temp\parts' 

在Python里面我没有找到这种格式的路径,而且这个路径有时候会报错,但是我重启代码的时候可以运行成功,为什么以及如何解决这个问题? 此外,当我将此 file_path 更改为

file_path = '/11.110.100.1/test/'

显示FileNotFoundError,找不到具体路径

在大多数操作系统上,文件路径如下所示:

/directory/directory/file_name

在 Windows 上,它们看起来像这样:

drive:\directory\directory\file_name

除了一些古老的历史(与 DOS 1.0 和 2.0 相关)外,没有什么好的理由。然而,我们暂时坚持这种设计选择,它会引起(可以理解的)开发人员和用户的混淆。你可以为此感谢微软的 Paul Allen,或者当时在 IBM 的一些西装,甚至可能是 Tops-10 或 CP/M 的设计师 - 最后,这并不重要,我们被困住了使用它是为了向后兼容。

因为在大多数操作系统中,\ 是一个转义字符(即您可以使用它来插入特殊字符,如换行符 \n),Python 遵循该约定。这解释了为什么你需要 Windows-format 文件路径前面的 r(例如 r'drive:\directory\directory\file_name'),告诉 Python not 来解释反斜杠作为转义字符。否则,您必须加倍加倍反斜杠,例如 'drive:\directory\directory\file_name'.

但是,因为 Windows 现在在很多地方也可以理解正斜杠,并且因为 Python 中的许多库需要跨多个操作系统工作,所以在几乎所有情况下你都可以只使用正斜杠相反,文件路径中的斜杠,因此 'drive:/directory/directory/file_name' 也有效。

并且因为路径可以是相对的(在任何 OS 上),所以它 不必 从驱动器开始。尽管它将转换为以驱动器或网络位置开头的绝对路径,例如 \server\share\(增加了更多的复杂性,因为这需要双反斜杠,因此在常规 Python 字符串中需要四重反斜杠)。但是,如果路径以 /\ 开头,则它在 Windows 上被解释为“从当前驱动器的根目录开始”,或者在 Windows 上被解释为“从文件系统的根目录开始”其他 OSes.

因此,'/11.110.100.1/test/' 表示“当前驱动器根目录或文件系统根目录中名为“11.110.100.1”的文件夹中名为 'test' 的文件夹”。

这可能不是你的意思,你原来的 r"\11.110.100.1\test\" 有效是因为它有 r(所以反斜杠保持加倍),这意味着第一部分被解释为服务器位置 \11.110.100.1 其余的是该服务器上资源的路径 \test\ - 大多数操作系统在分隔文件夹时会忽略额外的反斜杠。

类似 x\y\\\z 的意思与 x\y\z 相同,因为 x\y 等于 x\.\y.

因此,您的 \test\ 中的路径只是 test,您的字符串可能是 r"\11.110.100.1\test\""\\11.110.100.1\test\",它们本来是完全相同的。

如果您希望它与正斜杠一起使用,在大多数情况下这可能会起作用:"//11.110.100.1/test/" 因为它在除 Windows 之外的任何 OS 上看起来都是这样的。

尝试:

file_path = '//11.110.100.1/test/'
for file_name in os.listdir(file_path):
  print(file_name)

(单引号是默认的,但双引号也可以)