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



现在我在网络中有一个文件夹(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:tempparts' 

在Python中,我还没有找到这种格式的路径,而且,有时它会在这个路径中显示错误,但当我重新启动代码时,它可以成功运行,为什么以及如何解决这个问题?此外,当我将此文件路径更改为时

file_path = '/11.110.100.1/test/'

它显示FileNotFoundError,找不到特定的路径

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

/directory/directory/file_name

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

drive:directorydirectoryfile_name

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

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

然而,由于Windows现在在许多地方也理解正向斜杠,并且Python中的许多库需要跨多个操作系统工作,因此在几乎所有情况下,您都可以在文件路径中使用正向斜杠,因此'drive:/directory/directory/file_name'也可以工作。

因为路径可以是相对的(在任何操作系统上(,所以不必从驱动器开始。尽管它将转换为以驱动器或网络位置(如\servershare(开头的绝对路径(由于需要两个后斜杠,所以增加了复杂性,因此在常规Python字符串中需要四个后斜杠(。但是如果路径以/开始;从当前驱动器的根";在Windows上;从文件系统的根";在其他操作系统上。

因此,'/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的意思与xyz相同,因为x\y相当于x.y

所以,你的\test\中的路径只是test,你的字符串可能是r"\11.110.100.1test""\\11.110.100.1\test\",它可能完全相同。

如果你想让它使用正向斜杠,在大多数情况下,这可能会起作用:"//11.110.100.1/test/",因为这是它在除Windows之外的任何操作系统上的样子。

尝试:

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

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

最新更新