开发者社区> 问答> 正文

忽略文件名编码

你想使用原始文件名执行文件的I/O操作,也就是说文件名并没有经过系统默认编码去解码或编码过。

展开
收起
哦哦喔 2020-04-17 12:27:23 752 0
1 条回答
写回答
取消 提交回答
  • 默认情况下,所有的文件名都会根据 sys.getfilesystemencoding() 返回的文本编码来编码或解码。比如:
    
    >>> sys.getfilesystemencoding()
    'utf-8'
    >>>
    如果因为某种原因你想忽略这种编码,可以使用一个原始字节字符串来指定一个文件名即可。比如:
    
    >>> # Wrte a file using a unicode filename
    >>> with open('jalape\xf1o.txt', 'w') as f:
    ...     f.write('Spicy!')
    ...
    6
    >>> # Directory listing (decoded)
    >>> import os
    >>> os.listdir('.')
    ['jalapeño.txt']
    
    >>> # Directory listing (raw)
    >>> os.listdir(b'.') # Note: byte string
    [b'jalapen\xcc\x83o.txt']
    
    >>> # Open file with raw filename
    >>> with open(b'jalapen\xcc\x83o.txt') as f:
    ...     print(f.read())
    ...
    Spicy!
    >>>
    正如你所见,在最后两个操作中,当你给文件相关函数如 open() 和 os.listdir() 传递字节字符串时,文件名的处理方式会稍有不同。
    
    2020-04-17 12:27:32
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载