Python:获取存储在Windows中的文件名大小写?

dig*_*ums 15 python windows filenames case

尽管Windows不区分大小写,但它确实保留了文件名中的大小写.在Python中,有没有办法获得带有大小写的文件名,因为它存储在文件系统中?

例如,在Python程序中我有filename ="texas.txt",但是想要知道它实际上存储在文件系统上的"TEXAS.txt",即使这对于各种文件操作来说是无关紧要的.

Rei*_*ica 9

这是最简单的方法:

>>> import win32api
>>> win32api.GetLongPathName(win32api.GetShortPathName('texas.txt')))
'TEXAS.txt'
Run Code Online (Sandbox Code Playgroud)

  • 是的,这很有效.实际上,为了澄清,你的原始建议确实有效,但是如果包含一个目录则不行 - 例如,`win32api.GetLongPathName('\\ states \\ texas.txt')`产生''\\ states \\ TEXAS.txt'而``win32api.GetLongPathName(win32api.GetShortPathName('\\ states \\ texas.txt'))`正确地产生`'\\ STATES \\ TEXAS.txt'.那让我很困惑,现在我已经定下来了.谢谢! (2认同)
  • 好的解决方案 澄清:需要令人费解的内部`GetShortPathName()`调用,因为`GetLongPathName()`确实_not_大小写正确的路径_already_长(非8.3格式).在Python 3.x中,该示例即使使用非ASCII文件名也可以正常工作,但在2.x中,您必须显式使用Unicode字符串并调用`GetLongPathNameW()`(注意`W`).如果你有`pip`,你可以运行`pip install pypiwin32`来安装`win32api`模块(通过`pypiwin32`包). (2认同)
  • 请注意,如果文件没有短文件名,则此解决方案将“不起作用”(如果在系统或卷上禁用短文件名生成,则可能会发生这种情况)。此外,“GetLongPathName”不会更正驱动器号的大小写。 (2认同)

Cro*_*ouZ 5

上面的win32api解决方案我遇到了特殊字符的问题.对于unicode文件名,您需要使用:

win32api.GetLongPathNameW(win32api.GetShortPathName(path))
Run Code Online (Sandbox Code Playgroud)

  • 好点(适用于Python 2.x - 3.x上不需要,本机为Unicode).只是为了明确:输入路径(也)必须是Unicode字符串(例如,`u'texas.txt'.). (2认同)