Python 忽略文件名编码的方法
作者:David Beazley 发布时间:2021-06-11 15:16:55
标签:Python,忽略,文件名,编码
问题
你想使用原始文件名执行文件的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程序。
读取目录并通过原始未解码方式处理文件名可以有效的避免这样的问题, 尽管这样会带来一定的编程难度。
关于打印不可解码的文件名,请参考
来源:https://python3-cookbook.readthedocs.io/zh_CN/latest/c05/p14_bypassing_filename_encoding.html


猜你喜欢
- 新版Django在admin后台直接删除一条数据时,file = models.FileField(upload_to=‘file'
- python打印当前文件的绝对路径并解决打印为空获取当前文件所在路径主要使用os.path.dirname(os.path.abspath(
- 继续Mootools的扩展,适用于Mootools 1.1及1.2,这次在Element扩展了两个非常简单的方法,一个用来获取
- AdobeAdobe公司的标识1982年,40多岁的程序员约翰·沃诺克(John Warnock)和查尔斯·杰斯克(Charles Gesc
- 本文实例讲述了python实现美团订单推送到测试环境,提供便利操作。分享给大家供大家参考,具体如下:背景: 有时候需要在测试环境下一个美团的
- 引言 今天和测试沟通一个百分比计算方式时遇到一个问题, 我在存储过程里用到了强转
- 本文实例讲述了PHP实现根据数组某个键值大小进行排序的方法。分享给大家供大家参考,具体如下:问题:针对给定数组的某个键的键值进行排序解决方法
- 1、创建数组 var array = new Array(); var array = new Array(size);//指定数组的长度
- 继续pygame实现俄罗斯方块游戏(AI篇1)的代码更新一、消除后才做评价上一篇我们是对方块落下的位置和落下后出来的空洞进行了评价,但是这些
- 前面我们已经构造了一种图形可视化的模板了,下面我们直接使用这个模板进行增添和修改,进一步的改善图形的外观。import matplotlib
- 设置字段可选在摆弄了一会之后,你或许会发现管理工具有个限制:编辑表单需要你填写每一个字段,然而在有些情况下,你想要某些字段是可选的。 举个例
- 要使用摄像头,需要使用cv2.VideoCapture(0)创建VideoCapture对象,参数0指的是摄像头的编号,如果你电脑上有两个摄
- 对于python开发用户而言,经常需要安装一些python的第三方库,但是第三方库的安装经常出错,以下给大家介绍一下python安装第三方库
- 第一步,下载依赖yarn add kindeditor第二步,建立kindeditor.vue组件<template> <
- np.nonzero函数是numpy中用于得到数组array中非零元素的位置(数组索引)的函数。一般来说,通过help(np.nonzero
- 1.介绍Go官方提供了database包,database包下有sql/driver。该包用来定义操作数据库的接口,这保证了无论使用哪种数据
- PM2实现Nodejs项目自动部署首先简单说下思路:本地git仓库与远程仓库关联(github、码云等平台),然后pm2按照指定配置登录服务
- 基于循环神经网络(RNN)的古诗生成器,具体内容如下之前在手机百度上看到有个“为你写诗”功能,能够随机生成古诗,当时感觉很酷炫= =在学习了
- 实现2048相对来说比较简单,用4*4的二维数组保存地图,pygame.key.get_pressed()获取键盘操作,详见代码。效果图代码
- 画布可以做很多事情,比如可以绘图,也可以做海报。在这里只是想拿它来的实现亲笔签名,开启不一样的亲笔签名姿势。开发框架:uniapp开发语言: