【问题标题】:A super strange bug of os.path.abspathos.path.abspath的一个超级奇怪的bug
【发布时间】:2011-08-08 15:22:58
【问题描述】:

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

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

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

有人有同样的问题吗?
谁能告诉我为什么?

【问题讨论】:

    标签: python windows filesystems


    【解决方案1】:

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

    这种行为的原因是 CON 在 Windows 中是 illegal filename(尝试 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)
    

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

    CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, 
    LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9. 
    

    正如slowdog 所注意到的,the same MSDN document as above 中提到\\.\CON 是直接访问此类设备名称的正确方法。

    【讨论】:

    • 蒂姆,谢谢你的回答。我用谷歌搜索了“con”,发现没有文件可以命名为“con.*”,因为它是一个“设备名称”。在 Windows 上感到羞耻。
    • 如果遇到一个甚至不应该存在的文件名,很难说它应该返回什么。您也可以争辩说它应该引发异常。
    • @wberry:显然,'\\.\CON' 是(可能 the)引用设备的正确方法:msdn.microsoft.com/en-us/library/…
    • 你是什么意思“在 Windows 上感到羞耻”?它必须为其设备命名。
    • @David:是的,但我认为没有必要将设备名称保留在每个路径下
    猜你喜欢
    • 2021-11-27
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    相关资源
    最近更新 更多