Python 忽略文件名编码的方法
问题
你想使用原始文件名执行文件的I/O操作,也就是说文件名并没有经过系统默认编码去解码或编码过。
解决方案
默认情况下,所有的文件名都会根据 sys.getfilesystemencoding() 返回的文本编码来编码或解码。比如:
>>> sys.getfilesystemencoding()’utf-8’>>>
如果因为某种原因你想忽略这种编码,可以使用一个原始字节字符串来指定一个文件名即可。比如:
>>> # Wrte a file using a unicode filename>>> with open(’jalapexf1o.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’jalapenxccx83o.txt’]>>> # Open file with raw filename>>> with open(b’jalapenxccx83o.txt’) as f:... print(f.read())...Spicy!>>>
正如你所见,在最后两个操作中,当你给文件相关函数如 open() 和 os.listdir() 传递字节字符串时,文件名的处理方式会稍有不同。
讨论
通常来讲,你不需要担心文件名的编码和解码,普通的文件名操作应该就没问题了。 但是,有些操作系统允许用户通过偶然或恶意方式去创建名字不符合默认编码的文件。 这些文件名可能会神秘地中断那些需要处理大量文件的Python程序。
读取目录并通过原始未解码方式处理文件名可以有效的避免这样的问题, 尽管这样会带来一定的编程难度。
关于打印不可解码的文件名,请参考
以上就是Python 忽略文件名编码的方法的详细内容,更多关于Python 忽略文件名编码的资料请关注好吧啦网其它相关文章!
相关文章:
1. ASP.NET MVC使用typeahead.js实现输入智能提示功能2. HTML5视频播放标签video和音频播放标签audio标签的正确用法3. IntelliJ IDEA : .java文件左下角显示"J"图标的问题4. 关于Spring Boot动态权限变更问题的实现方案5. 使用IDEA编写jsp时EL表达式不起作用的问题及解决方法6. vue实现用户长时间不操作自动退出登录功能的实现代码7. springboot-2.3.x最新版源码阅读环境搭建(基于gradle构建)8. 解决Python 进程池Pool中一些坑9. 解决vue scoped scss 无效的问题10. jsp中sitemesh修改tagRule技术分享

网公网安备