现在我在网络中有一个文件夹(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)
(单引号是默认的,但双引号也可以(