为什么在文件名末尾加上点会导致 python 认为该文件存在?



>假设在当前工作目录中有一个名为"blabarfoo"文件名末尾没有文件扩展名,例如".txt"或".mp3" 考虑以下 3 行代码:

import os
import pathlib
path1 = pathlib.Path(os.getcwd()) / "blahbarfoo"

我希望以下代码行返回 true,并且确实如此:

pathlib.Path(path1).exists()

但是,我惊讶地发现以下对exists()的调用也返回 true:

path2 = pathlib.Path(os.getcwd()) / "blahbarfoo........"
pathlib.Path(path1).exists()

请注意,没有名为blahbarfoo........

的文件有人可以向我解释为什么路径尽头的点不会影响任何事情吗?
下面显示了更多演示该现象的代码:

import os
import pathlib
def get_path_stats(xpath):
stats = 'n'.join([str(x[0]).ljust(10) + str(x[1]) for x in [
("*"* 60, ""),
("path:", xpath),
['is_file:', pathlib.Path(xpath).is_file()],
["exists:",  pathlib.Path(xpath).exists()],
["is dir:", pathlib.Path(xpath).is_dir()],
("*"* 60, ""),
]])
return stats
p1 = pathlib.Path(os.getcwd()) / "blahb"
p2 = pathlib.Path(os.getcwd()) / "blahbarfoo"
p3 = pathlib.Path(os.getcwd()) //"blahbarfoo."
p4 = pathlib.Path(os.getcwd()) / "blahbarfoo........"
ps = [p1, p2, p3, p4]
for p in ps:
status = get_path_stats(p)
print(status)

我们有以下输出:

************************************************************
path:     D:FILE_MGMT_PYTHONblahb
is_file:  False
exists:   False
is dir:   False
************************************************************
************************************************************
path:     D:FILE_MGMT_PYTHONblahbarfoo
is_file:  True
exists:   True
is dir:   False
************************************************************
************************************************************
path:     D:FILE_MGMT_PYTHONblahbarfoo.
is_file:  True
exists:   True
is dir:   False
************************************************************
************************************************************
path:     D:FILE_MGMT_PYTHONblahbarfoo........
is_file:  True
exists:   True
is dir:   False
************************************************************ 

我想知道.是否可能匹配零个或多个字符,但python说文件blahb.不存在:

************************************************************
path:     D:FILE_MGMT_PYTHONblahb.
is_file:  False
exists:   False
is dir:   False
************************************************************ 

这与Python无关,而是与文件系统以及操作系统如何处理它有关。

它将在除基于 Windows 的系统之外的几乎所有系统上返回False

如果打开命令行,进入该目录并键入dir blahbarfoo,它将列出该文件,但dir blahbarfoo.*不会。dir blahbarfoo.将列出该文件。

"概念"(无论多么有争议(是该文件没有扩展名,因此如果您搜索带有任何扩展名的名称,则不会列出(任何扩展名 != 无扩展名(。

但是,如果您确实指定了一个.,那么您只需再次说"无扩展名",它就会被列出。由于所有这些点都不是扩展名(您不能有...扩展名(,因此不考虑它们并列出文件。

但是,如果您使用 Windows UI 并从那里重命名文件,则情况会有所不同。

pathlibos.path都使用系统调用stat来确定文件是否存在,系统调用就是这样:它取决于系统(有关详细信息,您可能需要查找 FAT、NTFS 之间的差异以及它们在各种版本的 Windows 中的支持方式(。

相关内容

  • 没有找到相关文章

最新更新