Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在文件名末尾加点会让python认为文件存在? 假设在当前工作目录中有一个名为“ BababFoo./COD>”的文件,文件名末尾没有文件扩展名,如“ .txt ”或“ .mp3 >考虑以下3行代码: import os import pathlib path1 = pathlib.Path(os.getcwd()) / "blahbarfoo"_Python_Python 3.x_Path_Filepath - Fatal编程技术网

为什么在文件名末尾加点会让python认为文件存在? 假设在当前工作目录中有一个名为“ BababFoo./COD>”的文件,文件名末尾没有文件扩展名,如“ .txt ”或“ .mp3 >考虑以下3行代码: import os import pathlib path1 = pathlib.Path(os.getcwd()) / "blahbarfoo"

为什么在文件名末尾加点会让python认为文件存在? 假设在当前工作目录中有一个名为“ BababFoo./COD>”的文件,文件名末尾没有文件扩展名,如“ .txt ”或“ .mp3 >考虑以下3行代码: import os import pathlib path1 = pathlib.Path(os.getcwd()) / "blahbarfoo",python,python-3.x,path,filepath,Python,Python 3.x,Path,Filepath,我希望下面的代码行返回true,它确实返回了: pathlib.Path(path1).exists() 但是,我惊讶地发现,对exists()的以下调用也返回true: path2 = pathlib.Path(os.getcwd()) / "blahbarfoo........" pathlib.Path(path1).exists() 请注意,没有名为blahbarfoo的文件。 有人能给我解释一下为什么路径末端的点不会产生任何影响吗? 下面显示了演示此现象的更多代码: import

我希望下面的代码行返回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无关,而是与文件系统以及操作系统如何处理它有关

除了基于Windows的系统外,几乎所有系统都会返回
False

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

“概念”(尽管有争议)是该文件没有扩展名,因此如果您使用任何扩展名搜索该名称,它将不会被列出(任何扩展名!=无扩展名)

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

但是,如果使用Windows UI并从中重命名文件,则情况有所不同


pathlib
os.path
都使用系统调用
stat
来确定文件是否存在,系统调用就是这样:它取决于系统(有关详细信息,您可能希望查找FAT和NTFS之间的差异,以及不同版本的Windows如何支持它们)这与Python无关,而是与文件系统以及操作系统如何处理它有关

除了基于Windows的系统外,几乎所有系统都会返回
False

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

“概念”(尽管有争议)是该文件没有扩展名,因此如果您使用任何扩展名搜索该名称,它将不会被列出(任何扩展名!=无扩展名)

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

但是,如果使用Windows UI并从中重命名文件,则情况有所不同

pathlib
os.path
都使用系统调用
stat
来确定文件是否存在,系统调用就是这样:它取决于系统(有关详细信息,您可能希望查找FAT和NTFS之间的差异,以及不同版本的Windows如何支持它们)