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 相关文章推荐
Fabric 应用案例
Aug 28 Python
python django 实现验证码的功能实例代码
May 18 Python
利用python对Excel中的特定数据提取并写入新表的方法
Jun 14 Python
Python爬虫包BeautifulSoup异常处理(二)
Jun 17 Python
Python3.5 处理文本txt,删除不需要的行方法
Dec 10 Python
PyQt打开保存对话框的方法和使用详解
Feb 27 Python
python装饰器简介---这一篇也许就够了(推荐)
Apr 01 Python
在Pandas中处理NaN值的方法
Jun 25 Python
tensorflow获取预训练模型某层参数并赋值到当前网络指定层方式
Jan 24 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
Feb 29 Python
Django REST Framework 分页(Pagination)详解
Nov 30 Python
浅析python字符串前加r、f、u、l 的区别
Jan 24 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设计模式中单例模式的应用分析
2013/05/15 PHP
php下载excel无法打开的解决方法
2013/12/24 PHP
ThinkPHP实现跨模块调用操作方法概述
2014/06/20 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
2016/03/06 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
JavaScript去除空格的三种方法(正则/传参函数/trim)
2013/02/06 Javascript
九种js弹出对话框的方法总结
2013/03/12 Javascript
JS模拟简易滚动条效果代码(附demo源码)
2016/04/05 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
JS中正则表达式全局匹配模式 /g用法详解
2017/04/01 Javascript
JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码
2017/09/07 Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
2017/12/01 Javascript
垃圾回收器的相关知识点总结
2018/05/13 Javascript
vue打包之后生成一个配置文件修改接口的方法
2018/12/09 Javascript
如何使用CSS3+JQuery实现悬浮墙式菜单
2019/06/18 jQuery
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
vue开发简单上传图片功能
2020/06/30 Javascript
微信小程序实现列表左右滑动
2020/11/19 Javascript
解决基于 keep-alive 的后台多级路由缓存问题
2020/12/23 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
python开启多个子进程并行运行的方法
2015/04/18 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
2018/05/29 Python
pycharm 实现显示project 选项卡的方法
2019/01/17 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
2019/06/28 Python
Python+OpenCV实现图像的全景拼接
2020/03/05 Python
HTML5 LocalStorage 本地存储刷新值还在
2017/03/10 HTML / CSS
美国网上订购鲜花:FTD
2016/09/23 全球购物
鞋子女王塔玛拉·梅隆同名奢侈品牌:Tamara Mellon
2017/11/22 全球购物
瑞典度假品牌:OAS
2019/05/28 全球购物
JSF面试题:Jsf中的核心类用那些?有什么作用?LiftCycle六大生命周期是什么?
2014/07/17 面试题
what is the difference between ext2 and ext3
2013/11/03 面试题
小学毕业感言500字
2014/02/28 职场文书
2014高三学生考试作弊检讨书
2014/12/14 职场文书
科技馆观后感
2015/06/08 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书
python使用pywinauto驱动微信客户端实现公众号爬虫
2021/05/19 Python