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实现用户登陆邮件通知的方法
Jul 09 Python
Python中内置数据类型list,tuple,dict,set的区别和用法
Dec 14 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
Nov 11 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
Sep 25 Python
Python爬虫设置代理IP(图文)
Dec 23 Python
PyCharm 创建指定版本的 Django(超详图解教程)
Jun 18 Python
python中对数据进行各种排序的方法
Jul 02 Python
python中自带的三个装饰器的实现
Nov 08 Python
Pytorch GPU显存充足却显示out of memory的解决方式
Jan 13 Python
python如何快速生成时间戳
Jul 21 Python
详解Python flask的前后端交互
Mar 31 Python
Python实现自动玩连连看的脚本分享
Apr 04 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缓存类完整实例
2014/07/26 PHP
php中current、next与reset函数用法实例
2014/11/17 PHP
php目录遍历函数opendir用法实例
2014/11/20 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
2015/05/12 PHP
yii2学习教程之5种内置行为类详解
2017/08/03 PHP
My Desktop :) 桌面式代码
2008/12/29 Javascript
Jquery 表格合并的问题分享
2011/09/17 Javascript
JavaScript如何从listbox里同时删除多个项目
2013/10/12 Javascript
Js操作Select大全(取值、设置选中等等)
2013/10/29 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
Nodejs实现批量下载妹纸图
2015/05/28 NodeJs
JavaScript实现自动消除按钮功能的方法
2015/08/05 Javascript
老生常谈onBlur事件与onfocus事件(js)
2016/07/09 Javascript
Map.vue基于百度地图组件重构笔记分享
2017/04/17 Javascript
微信小程序中input标签详解及简单实例
2017/05/18 Javascript
Angular实现图片裁剪工具ngImgCrop实践
2017/08/17 Javascript
vue-cli之router基本使用方法详解
2017/10/17 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
2018/05/07 Javascript
详解Vue+axios+Node+express实现文件上传(用户头像上传)
2018/08/10 Javascript
python使用Matplotlib画条形图
2020/03/25 Python
python判断自身是否正在运行的方法
2019/08/08 Python
python根据时间获取周数代码实例
2019/09/30 Python
浅谈Python中re.match()和re.search()的使用及区别
2020/04/14 Python
Python爬虫爬取博客实现可视化过程解析
2020/06/29 Python
python实现简单遗传算法
2020/09/18 Python
html5与css3小应用
2013/04/03 HTML / CSS
Theflamel意大利:女士奢华服装、鞋子和配件
2020/01/11 全球购物
杭州联环马网络笔试题面试题
2013/08/04 面试题
小学亲子活动总结
2014/07/01 职场文书
医生辞职信范文
2015/03/02 职场文书
办公用品质量保证书
2015/05/11 职场文书
一个都不能少观后感
2015/06/04 职场文书
Python数据分析入门之教你怎么搭建环境
2021/05/13 Python
redis客户端实现高可用读写分离的方式详解
2021/07/04 Redis
分位数回归模型quantile regeression应用详解及示例教程
2021/11/02 Python
「月刊Action」2022年5月号封面公开
2022/03/21 日漫