如何使用绝对路径访问网络位置?
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)
(单引号是默认的,但双引号也可以)
现在我在网络中有一个文件夹(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)
(单引号是默认的,但双引号也可以)