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中__slots__用法实例
Jun 04 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
Jun 23 Python
python如何查看系统网络流量的信息
Sep 12 Python
Python 两个列表的差集、并集和交集实现代码
Sep 21 Python
Python安装官方whl包和tar.gz包的方法(推荐)
Jun 04 Python
pytorch 数据集图片显示方法
Jul 26 Python
python3.6的venv模块使用详解
Aug 01 Python
Python 3 实现定义跨模块的全局变量和使用教程
Jul 07 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
Jul 07 Python
Python使用sqlite3模块内置数据库
May 07 Python
python连接mysql数据库并读取数据的实现
Sep 25 Python
Django使用echarts进行可视化展示的实践
Jun 10 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中“简单工厂模式”实例代码讲解
2012/09/04 PHP
深入for,while,foreach遍历时间比较的详解
2013/06/08 PHP
ExtJS 2.0实用简明教程 之ExtJS版的Hello
2009/04/29 Javascript
用显卡加速,轻松把笔记本打造成取暖器的办法!
2013/04/17 Javascript
nodejs分页类代码分享
2014/06/17 NodeJs
点击标签切换和自动切换DIV选项卡
2014/08/10 Javascript
gridview生成时如何去掉style属性中的border-collapse
2014/09/30 Javascript
json定义及jquery操作json的方法
2016/10/03 Javascript
js实现数组去重方法及效率?Ρ? target=
2017/02/14 Javascript
详解ES6 Fetch API HTTP请求实用指南
2018/11/14 Javascript
使用Typescript和ES模块发布Node模块的方法
2020/05/25 Javascript
vscode 插件开发 + vue的操作方法
2020/06/05 Javascript
jQuery冲突问题解决方法
2021/01/19 jQuery
jquery实现穿梭框功能
2021/01/19 jQuery
[01:33:59]真人秀《加油 DOTA》 第六期
2014/09/09 DOTA
python遍历数组的方法小结
2015/04/30 Python
Python2中的raw_input() 与 input()
2015/06/12 Python
python互斥锁、加锁、同步机制、异步通信知识总结
2018/02/11 Python
更换Django默认的模板引擎为jinja2的实现方法
2018/05/28 Python
对django中foreignkey的简单使用详解
2019/07/28 Python
python Opencv计算图像相似度过程解析
2019/12/03 Python
python基于opencv 实现图像时钟
2021/01/04 Python
Sneaker Studio捷克:购买运动鞋
2018/07/08 全球购物
No7 Beauty美国官网:英国国民护肤品牌
2019/10/31 全球购物
局部内部类是否可以访问非final变量?
2013/04/20 面试题
const和static readonly区别
2013/05/20 面试题
应届生高等护理求职信
2013/10/12 职场文书
2014五一国际劳动节活动总结范文
2014/04/14 职场文书
公司贷款承诺书
2014/05/30 职场文书
2014年十一国庆节爱国演讲稿
2014/09/23 职场文书
房屋租房协议书范本
2014/12/04 职场文书
2015年国际护士节演讲稿
2015/03/18 职场文书
《我要的是葫芦》教学反思
2016/02/18 职场文书
68句权威创业名言
2019/08/26 职场文书
前端JS获取URL参数的4种方法总结
2022/04/05 Javascript
德生2P3收音机开箱评测
2022/04/30 无线电