Python将大小写文件名视为相同
我今天发现了一件事:
如果我有一个叫做 a111 的文件,我想用 Python 在同一个文件夹里创建一个叫 A111 的新文件:
f = file('A111', 'w')
f.write('test')
f.close()
结果会把我的 a111 文件覆盖掉,根本没有 A111 这个文件!!
我该怎么做才能避免这种情况发生呢?
3 个回答
1
Mac电脑的HFS+文件系统默认是不区分大小写的,也就是说,文件名“文件.txt”和“文件.TXT”被认为是一样的。只有在你从头开始安装系统的时候,才有一个选项可以选择开启区分大小写的功能。
2
其实我这边也能重现这个问题。
nixon:~ matt$ touch a111
nixon:~ matt$ python
Python 2.7.2 (default, Nov 14 2011, 19:37:59)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> f = file('A111', 'w')
>>> f.write('test')
>>> f.close()
>>>
nixon:~ matt$ cat a111
test
我也是在Mac上遇到的。
nixon:~ matt$ uname -a
Darwin nixon.local 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386
nixon:~ matt$ python --version
Python 2.7.2
我猜我们遇到的问题是因为我们都在用HFS这个文件系统,它是不区分大小写的。
8
这不是因为Python的问题,而是因为你使用的文件系统不区分大小写(我猜你的系统可能是HFS+?)。根据维基百科的说法:
并不是所有类Unix系统的文件系统都区分大小写;默认情况下,Mac OS X中的HFS+是大小写不敏感的。
解决办法是,如果你想要区分大小写的文件系统,就使用一个这样的文件系统,或者换一个文件名!