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实现ftp客户端示例分享
Feb 17 Python
Python实现多行注释的另类方法
Aug 22 Python
实例讲解python中的协程
Oct 08 Python
python3 面向对象__类的内置属性与方法的实例代码
Nov 09 Python
django与小程序实现登录验证功能的示例代码
Feb 19 Python
Python使用uuid库生成唯一标识ID
Feb 12 Python
Python使用QQ邮箱发送邮件实例与QQ邮箱设置详解
Feb 18 Python
python 使用while循环输出*组成的菱形实例
Apr 12 Python
Python是什么 Python的用处
May 26 Python
Python实现爬取网页中动态加载的数据
Aug 17 Python
python实现人工蜂群算法
Sep 18 Python
python opencv通过4坐标剪裁图片
Jun 05 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 需要掌握的东西 不做浮躁的人
2009/12/28 PHP
php实现的树形结构数据存取类实例
2014/11/29 PHP
又拍云异步上传实例教程详解
2016/04/19 PHP
Linux下快速搭建php开发环境
2017/03/13 PHP
详解Yii2 之 生成 URL 的方法
2017/06/16 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
CSS+JS构建的图片查看器
2006/07/22 Javascript
可缩放Reloaded-一个针对可缩放元素的复用组件
2007/03/10 Javascript
JavaScript的parseInt 进制问题
2009/05/07 Javascript
javascript 从if else 到 switch case 再到抽象
2010/07/17 Javascript
jQuery右键菜单contextMenu使用实例
2011/09/28 Javascript
jquery配合css简单实现返回顶部效果
2013/09/30 Javascript
jQuery Validate 验证,校验规则写在控件中的具体实例
2014/02/27 Javascript
js获取表格的行数和列数的方法
2015/10/23 Javascript
bootstrap日历插件datetimepicker使用方法
2016/12/14 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
Node.js中的http请求客户端示例(request client)
2017/05/04 Javascript
jQuery实现移动端图片上传预览组件的方法分析
2020/05/01 jQuery
Django 使用logging打印日志的实例
2018/04/28 Python
Python随机函数random()使用方法小结
2018/04/29 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
python 格式化输出百分号的方法
2019/01/20 Python
Python提取支付宝和微信支付二维码的示例代码
2019/02/15 Python
python3实现elasticsearch批量更新数据
2019/12/03 Python
Python MySQL 日期时间格式化作为参数的操作
2020/03/02 Python
python安装后的目录在哪里
2020/06/21 Python
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
HealthElement海外旗舰店:新西兰大卖场
2018/02/23 全球购物
土木工程实习生自我鉴定
2013/09/19 职场文书
外贸学院会计专业应届生求职信
2013/11/14 职场文书
银行转正自我鉴定
2014/09/29 职场文书
领导班子三严三实心得体会
2014/10/13 职场文书
2014幼儿园中班工作总结
2014/11/10 职场文书
2014年幼儿园学期工作总结
2014/12/05 职场文书
听课评课活动心得体会
2016/01/15 职场文书
《成长的天空》读后感3篇
2019/12/06 职场文书