Python的glob模块中,Unix的glob样式模式是否区分大小写?

6

我不熟悉 glob 模式样式,根据这个教程,它说 glob 区分大小写。

然而,当我使用 Python 的 glob 模块时,似乎 glob.glob('./M*')glob.glob('./m*') 返回相同的结果,也就是说,Python 的 glob 不区分大小写,如下所示(我将结果一起打印以确保它们同时执行):

enter image description here

我该如何区分大小写?我必须使用字符串方法吗?


1
这是不可能的。请提供精确的示例运行输出。 - heemayl
3
你正在进行通配符匹配的文件系统类型是什么?一些文件系统(例如NTFS)是不区分大小写的。 - jordanm
3
只有在区分大小写的文件系统上才会对大小写敏感。你使用了“unix”标签——你是在Unix系统上运行这个命令吗?当我运行你的命令时,我的结果与你所声称的不同。 - Bryan Oakley
@BryanOakley 我在一台从Mac系统引导的Windows 10系统上运行。根据这个 ,MacOS是不区分大小写但保留大小写的。我猜这就是为什么我不能在同一个目录下拥有不同大小写的文件,比如readme.txt和Readme.txt,也就是说,在Python的glob模块中是不区分大小写的。你怎么看? - Nicholas
1
@Nicholas:你说得对。在默认配置的 Mac 上,“Readme.txt”和“readme.txt”都指向同一个文件。 - Bryan Oakley
1个回答

5
glob源代码可以看到,它使用os.path.lexists,该函数使用lstat作为后端(如果lstat不可用,则回退到os.path.exists)。 glob本身对大小写敏感性没有任何更改。这取决于文件所在的文件系统。
[aarcher@Arch]: /tmp/test>$ rm -rf * && touch moo
[aarcher@Arch]: /tmp/test>$ python -q
>>> import glob
>>> glob.glob("m*")
['moo']
>>> glob.glob("M*")
[]
>>> 

但是您能进一步解释一下我如何知道我正在使用哪个文件系统以及它是否区分大小写吗?这个属性可以更改吗? - Nicholas
1
编写两个同名的文件。例如:echo 1 > test && echo 2 > TEST && cat test - Goodies

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接