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数据类型转换函数总结
Mar 11 Python
在Python的Bottle框架中使用微信API的示例
Apr 23 Python
python写入xml文件的方法
May 08 Python
python实现线程池的方法
Jun 30 Python
解析Python中while true的使用
Oct 13 Python
Python新手入门最容易犯的错误总结
Apr 24 Python
python中文件变化监控示例(watchdog)
Oct 16 Python
Python数据结构之栈、队列的实现代码分享
Dec 04 Python
Python datetime和unix时间戳之间相互转换的讲解
Apr 01 Python
Python中判断子串存在的性能比较及分析总结
Jun 23 Python
Python 下载及安装详细步骤
Nov 04 Python
Python tcp传输代码实例解析
Mar 18 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
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
分享PHP计算两个日期相差天数的代码
2015/12/23 PHP
jQuery之ajax技术的详细介绍
2013/06/19 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
Javascript基础教程之数据类型转换
2015/01/18 Javascript
H5图片压缩与上传实例
2017/04/21 Javascript
js绑定事件和解绑事件
2017/04/27 Javascript
jQuery实现div跟随鼠标移动
2020/08/20 jQuery
解决vue里碰到 $refs 的问题的方法
2017/07/13 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
jquery一键控制checkbox全选、反选或全不选
2017/10/16 jQuery
element-ui 限制日期选择的方法(datepicker)
2018/05/16 Javascript
AngularJS实现与后台服务器进行交互的示例讲解
2018/08/13 Javascript
vue在手机中通过本机IP地址访问webApp的方法
2018/08/15 Javascript
详解Webpack-dev-server的proxy用法
2018/09/08 Javascript
WebSocket的简单介绍及应用
2019/05/23 Javascript
使用layui定义一个模块并使用的例子
2019/09/14 Javascript
vue-openlayers实现地图坐标弹框效果
2020/09/24 Javascript
[01:13]这,就是刀塔
2014/07/16 DOTA
[43:32]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
2015/07/27 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
2019/06/10 Python
Django模板语言 Tags使用详解
2019/09/09 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
python列表删除和多重循环退出原理详解
2020/03/26 Python
NFL欧洲商店(德国):NFL Europe Shop DE
2018/11/03 全球购物
Raffaello Network西班牙:意大利拉斐尔时尚购物网
2019/03/12 全球购物
心得体会开头
2014/01/01 职场文书
国贸专业个人求职信范文
2014/01/08 职场文书
教师自荐信范文
2015/03/06 职场文书
停发工资证明范本
2015/06/12 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
vue项目支付功能代码详解
2022/02/18 Vue.js
CSS中实现动画效果-附案例
2022/02/28 HTML / CSS
MySQ InnoDB和MyISAM存储引擎介绍
2022/04/26 MySQL