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使用正则表达式检测密码强度源码分享
Jun 11 Python
python有证书的加密解密实现方法
Nov 19 Python
python中查看变量内存地址的方法
May 05 Python
Windows下Python使用Pandas模块操作Excel文件的教程
May 31 Python
django 类视图的使用方法详解
Jul 24 Python
在python中创建指定大小的多维数组方式
Nov 28 Python
Python爬取阿拉丁统计信息过程图解
May 12 Python
python语言中有算法吗
Jun 16 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
Sep 23 Python
详解matplotlib绘图样式(style)初探
Feb 03 Python
python中if嵌套命令实例讲解
Feb 25 Python
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
May 25 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
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
2007/01/29 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
php实现的debug log日志操作类实例
2016/07/12 PHP
php与c 实现按行读取文件实例代码
2017/01/03 PHP
基于jquery的direction图片渐变动画效果
2010/05/24 Javascript
js中的如何定位固定层的位置
2014/06/15 Javascript
JQuery实现防止退格键返回的方法
2015/02/12 Javascript
自定义百度分享的分享按钮
2015/03/18 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
2016/04/05 Javascript
使用JavaScript获取Request中参数的值方法
2016/09/27 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
JS获取一个表单字段中多条数据并转化为json格式
2017/10/17 Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
2018/08/17 Javascript
vue中使用props传值的方法
2019/05/08 Javascript
微信小程序swiper禁止用户手动滑动代码实例
2019/08/23 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
python求pi的方法
2014/10/08 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
2018/06/13 Python
python 自定义异常和异常捕捉的方法
2018/10/18 Python
Python版名片管理系统
2018/11/30 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
基于python3监控服务器状态进行邮件报警
2019/10/19 Python
python利用JMeter测试Tornado的多线程
2020/01/12 Python
Python面向对象中类(class)的简单理解与用法分析
2020/02/21 Python
Python的信号库Blinker用法详解
2020/12/31 Python
Regatta官网:英国最受欢迎的户外服装和鞋类品牌
2019/05/01 全球购物
十佳教师事迹材料
2014/01/11 职场文书
称象教学反思
2014/02/03 职场文书
集中整治工作方案
2014/05/01 职场文书
2016孝老爱亲模范事迹材料
2016/02/26 职场文书
python如何读取.mtx文件
2021/04/22 Python
MySQL数据库如何查看表占用空间大小
2022/06/10 MySQL