如何在调用Python的os.getcwd()时获取正确的大小写?

0 投票
4 回答
2790 浏览
提问于 2025-04-16 06:24

当我在我的Mac上,使用OS X 10.6.4从我的主目录调用os.getcwd()时,路径会被转换成小写。我得到的是

/users/myusername

而不是

/Users/myusername

在另一台Mac上,我得到了正确的大写字符串。我该如何配置这个?有没有什么(隐藏的)Python设置?

问这个问题的原因是:

在OS X上,所有用户目录都在"/Users"下。这总是大写的。当我使用Mercurial时,有时会因为当前目录的这种奇怪和不正确的规范化而感到困惑。

关于建议的解决方案的回复:

(1) DiskUtil显示我的驱动器格式是"Mac OS Extended (Journaled)"。我几个月前买的电脑,还是原来的驱动器,从未重新格式化过。

(2) 另一个Python控制台会话的日志:

$>>> os.system('pwd')

/Users/klaas

0

$>>> os.getcwd()

'/users/klaas'

$>>> os.path.normcase('/Users/klaas')

'/Users/klaas'

$>>> os.chdir('/UsErS/klaas')

$>>> os.getcwd()

'/users/klaas'

$>>> os.chdir('/UsErS/klaas')

$>>> os.getcwd()

'/users/klaas'

更新 2:

感谢大家的回复。我在Objective-C中创建了一个测试案例,它也有相同的小写文件夹名称:

NSFileManager *filemgr;
NSString *currentpath;

filemgr = [NSFileManager defaultManager];

currentpath = [filemgr currentDirectoryPath];

NSLog (@"Current directory is %@", currentpath);

4 个回答

0

两个不太靠谱的猜测:

首先,OSX系统通常是不区分大小写的,这意味着它会保留字母的大小写:当前目录的名字要么是它在磁盘上的大小写样式,要么是你进入这个目录时的大小写。如果你运行 os.system('pwd'),它显示的是小写还是大写呢?如果是小写,那就是系统这样报告的,Python并没有出错。如果你先运行 os.chdir('/UsErS/username'),结果会变吗?

其次,有一个函数会根据操作系统选择性地处理大小写:os.path.normcase。在Mac系统中,这个函数会把字母变成小写。我很确定 os.getcwd 并不会自动把结果通过这个函数处理;只是提一下,作为一个可以检查的地方。

2

“HFS plus”文件系统是苹果自Mac OS 8时代以来一直在用的文件系统,通常情况下它是不区分大小写的。

而Mac OS X 10.4版本,也就是大家常说的“Tiger”,引入了可以创建区分大小写的HFS plus文件系统的功能。

那么,他们中的某一个可能在使用区分大小写的文件系统吗?

0

最后发现问题出在Mercurial的安装上。我今晚又遇到了这个问题。

https://www.mercurial-scm.org/wiki/Download 这个链接提供了不同的安装Mercurial的方法。如果我选择第一个选项(Mac OS X的安装包),那么“/Users”这个目录会被显示成“/users”(即使用Objective C访问也是如此)。这个问题可以通过使用macports选项来安装Mercurial来解决。这样就能把“/Users”目录正确显示为大写的“U”了。

如果有人能提供为什么会发生这个问题的线索,那就太好了。

不过至少现在有了解决办法。

撰写回答