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

问题描述 投票:1回答:1

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

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_PYTHON\blahb
is_file:  False
exists:   False
is dir:   False
************************************************************
************************************************************
path:     D:\FILE_MGMT_PYTHON\blahbarfoo
is_file:  True
exists:   True
is dir:   False
************************************************************
************************************************************
path:     D:\FILE_MGMT_PYTHON\blahbarfoo.
is_file:  True
exists:   True
is dir:   False
************************************************************
************************************************************
path:     D:\FILE_MGMT_PYTHON\blahbarfoo........
is_file:  True
exists:   True
is dir:   False
************************************************************ 

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

************************************************************
path:     D:\FILE_MGMT_PYTHON\blahb.
is_file:  False
exists:   False
is dir:   False
************************************************************ 
python python-3.x path filepath
1个回答
3
投票

这与Python不相关,但是与文件系统以及操作系统如何处理它。

除了基于Windows的系统以外,几乎所有其他系统都会返回False。>

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

“概念”(但值得商de的是文件没有扩展名,因此,如果您搜索具有任何扩展名的名称,则不会列出该文件名(任何扩展名!=无扩展名。)

但是如果您确实指定了.,那么您只是在简单地说“无扩展名”,它将被列出。由于所有这些点都不是扩展名(您不能具有...扩展名),因此不会考虑它们,并且文件已列出。

但是,如果您使用Windows UI并从此处重命名文件,则有所不同。

pathlibos.path两者都使用系统调用stat来确定文件是否存在,而系统调用仅是:它取决于系统(有关详细信息,您可能希望查找FAT之间的差异。 ,NTFS以及各种Windows版本如何支持它们。

© www.soinside.com 2019 - 2024. All rights reserved.