Python 忽略文件名编码的方法


Posted in Python onAugust 01, 2020

问题

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

解决方案

默认情况下,所有的文件名都会根据 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() 传递字节字符串时,文件名的处理方式会稍有不同。

讨论

通常来讲,你不需要担心文件名的编码和解码,普通的文件名操作应该就没问题了。 但是,有些操作系统允许用户通过偶然或恶意方式去创建名字不符合默认编码的文件。 这些文件名可能会神秘地中断那些需要处理大量文件的Python程序。

读取目录并通过原始未解码方式处理文件名可以有效的避免这样的问题, 尽管这样会带来一定的编程难度。

关于打印不可解码的文件名,请参考

以上就是Python 忽略文件名编码的方法的详细内容,更多关于Python 忽略文件名编码的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中__name__的使用实例
Apr 14 Python
python使用mailbox打印电子邮件的方法
Apr 30 Python
python正则表达式去除两个特殊字符间的内容方法
Dec 24 Python
在Pycharm中执行scrapy命令的方法
Jan 16 Python
python学习——内置函数、数据结构、标准库的技巧(推荐)
Apr 18 Python
python之生产者消费者模型实现详解
Jul 27 Python
python-web根据元素属性进行定位的方法
Dec 13 Python
Windows下Anaconda安装、换源与更新的方法
Apr 17 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
Jul 13 Python
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
Apr 24 Python
Python基于百度AI实现抓取表情包
Jun 27 Python
Python办公自动化之教你如何用Python将任意文件转为PDF格式
Jun 28 Python
Python 如何展开嵌套的序列
Aug 01 #Python
Python 日期与时间转换的方法
Aug 01 #Python
Python 执行矩阵与线性代数运算
Aug 01 #Python
Python实现数字的格式化输出
Aug 01 #Python
Python实现一个简单的递归下降分析器
Aug 01 #Python
Python 如何在字符串中插入变量
Aug 01 #Python
Python打印不合法的文件名
Jul 31 #Python
You might like
php实现的MySQL通用查询程序
2007/03/11 PHP
解决AJAX中跨域访问出现'没有权限'的错误
2008/08/20 Javascript
JavaScript入门教程(11) js事件处理
2009/01/31 Javascript
重载toString实现JS HashMap分析
2011/03/13 Javascript
Bootstrap+jfinal实现省市级联下拉菜单
2016/05/30 Javascript
JS结合bootstrap实现基本的增删改查功能
2016/07/22 Javascript
BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法
2016/12/01 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
使用jQuery给Table动态增加行、清空table的方法
2018/09/05 jQuery
Element输入框带历史查询记录的实现示例
2019/01/15 Javascript
js中的reduce()函数讲解
2019/01/18 Javascript
js+html5 canvas实现ps钢笔抠图
2019/04/28 Javascript
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
2019/06/06 jQuery
javascript定时器的简单应用示例【控制方块移动】
2019/06/17 Javascript
Vue 子组件与数据传递问题及注意事项
2019/07/11 Javascript
nginx部署多个vue项目的方法示例
2020/09/06 Javascript
[02:45]2016年中国刀塔全程回顾,完美“圣”典即将上演
2016/12/15 DOTA
在Python中使用SQLite的简单教程
2015/04/29 Python
python kmeans聚类简单介绍和实现代码
2018/02/23 Python
Python读取系统文件夹内所有文件并统计数量的方法
2018/10/23 Python
Python文件常见操作实例分析【读写、遍历】
2018/12/10 Python
在pytorch中查看可训练参数的例子
2019/08/18 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
2019/12/13 Python
Python如何基于selenium实现自动登录博客园
2019/12/16 Python
构建高效的python requests长连接池详解
2020/05/02 Python
小结Python的反射机制
2020/09/28 Python
Python偏函数实现原理及应用
2020/11/20 Python
python Scrapy框架原理解析
2021/01/04 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
如何转换一个字符串到enum值
2014/04/12 面试题
程序员跳槽必看面试题总结
2013/06/28 面试题
班级旅游计划书
2014/05/03 职场文书
艺术学院毕业生求职信
2014/07/09 职场文书
干部作风整顿自我剖析材料和整改措施
2014/09/18 职场文书
《夸父追日》教学反思
2016/02/20 职场文书
postgreSQL数据库基础知识介绍
2022/04/12 PostgreSQL