【问题标题】:Is Unix glob style pattern case sensitive in Python's glob module?Python 的 glob 模块中的 Unix glob 样式模式是否区分大小写?
【发布时间】:2018-02-16 21:41:35
【问题描述】:

我不熟悉glob 模式样式,并且基于this tutorial 它说glob 区分大小写。

但是,当我使用 Python 中的 glob 模块时,似乎 glob.glob('./M*')glob.glob('./m*') 返回相同的结果,即 Python 的 glob 区分大小写,in,见下文(我将结果一起打印以确保它们被串联执行),

如何区分大写和小写?为了这个,我必须求助于字符串方法吗?

【问题讨论】:

  • 那不可能。添加确切的示例运行输出。
  • 您正在使用的文件系统类型是什么?某些文件系统(例如 NTFS)不区分大小写。
  • 它只会在区分大小写的文件系统上区分大小写。您使用了unix 标签——您是在unix 系统上运行它吗?当我运行你的命令时,我没有得到你声称得到的结果。
  • @BryanOakley 我在从 Mac 系统启动的 Windows 10 系统上运行。基于this,MacOS 不区分大小写并保留大小写。我想这就是为什么我不能在同一个目录中有单独的文件,比如 readme.txt 和 Readme.txt,也就是说,它在 Python 的 glob 模块中不区分大小写。你怎么看?
  • @Nicholas:你是对的。在具有默认配置的 Mac 上,Readme.txtreadme.txt 都引用同一个文件。

标签: python python-3.x unix glob


【解决方案1】:

glob source code,您可以看到它使用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*")
[]
>>> 

【讨论】:

  • 但是您能否进一步解释一下我如何知道我使用的是什么文件系统以及它是否区分大小写?这个属性是可变的吗?
  • 写入两个同名文件。示例:echo 1 > test && echo 2 > TEST && cat test
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-07
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多