一个超级奇怪的os.path.abspath错误

Ver*_* Lu 28 python windows filesystems

在我的Python 2.6(64位,win7,ActivePython)上,当我打电话时: os.path.abspath('D:/PROJECTS/SuiShouBei/www/ssb/static/voices/en/mp3/con.mp3')

它返回:
'\\\\.\\con'

到目前为止,我对其他路径没有任何问题.

任何人都有同样的问题?
有人可以告诉我为什么吗?

Tim*_*ker 45

我可以在Python 2.6,2.7,3.1和3.2中重现这一点.

这种行为的原因是Windows中CON非法文件名(试着os.path.abspath('D:/PROJECTS/SuiShouBei/www/ssb/static/voices/en/mp3/cont.mp3')看一切正常).

因此请注意您的文件名不包含

< (less than)
> (greater than)
: (colon)
" (double quote)
/ (forward slash)
\ (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)
Run Code Online (Sandbox Code Playgroud)

也不要使用以下保留的设备名称作为文件名(带或不带扩展名):

CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, 
LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9. 
Run Code Online (Sandbox Code Playgroud)

正如slowdog注意到的那样,在上面相同的MSDN文档中提到\\.\CON直接访问这样的设备名称的正确方法.

  • 蒂姆,谢谢你的回答.我用google搜索'con',发现没有文件可以命名为'con.*',因为它是'DEVICE NAME'.在Windows上感到羞耻. (3认同)
  • @wberry:显然,'\\.\ CON'是一种(可能的**)正确的方式来引用该设备:http://msdn.microsoft.com/en-us/library/aa365247%28v=vs. 85%29.aspx#win32_device_namespaces (3认同)
  • 你是什​​么意思"窗户上的耻辱"?它必须命名其设备. (2认同)
  • @David:是的,但我认为没有必要将设备名称保留在每个路径下 (2认同)