忽略文件名编码

问题

你想使用原始文件名执行文件的 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 程序。

读取目录并通过原始未解码方式处理文件名可以有效的避免这样的问题,尽管这样会带来一定的编程难度。

关于打印不可解码的文件名,请参考 5.15 小节。

《Python Cookbook 3rd》笔记(5.14):忽略文件名编码相关推荐

  1. 《Python Cookbook 3rd》笔记汇总

    文章目录 一.数据结构 二.字符串和文本 三.数字.日期和时间 四.迭代器与生成器 五.文件与IO 一.数据结构 标题 关键词 1.1:拆分序列后赋值给多个变量 可迭代对象.拆分赋值 1.2:拆分任意 ...

  2. 《Python Cookbook 3rd》笔记(1.4):查找最大或最小的N个元素

    <Python Cookbook 3rd>1.4:查找最大或最小的N个元素 问题 怎样从一个集合中获得最大或者最小的N个元素列表? 解法 heapq 模块有两个函数:nlargest()和 ...

  3. 《Python cookbook》笔记二

    <Python cookbook>笔记二 第二章 字符串和文本 -使用多个界定符分割字符串- 你需要将一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定 的. # str ...

  4. Machine Learning with Python Cookbook 学习笔记 第8章

    Chapter 8. Handling Images 前言 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放 ...

  5. Python Cookbook 3rd Edition Documentation

    Python Cookbook 3rd Edition Documentation 文章目录 第一章:数据结构和算法 1.1 解压序列赋值给多个变量 问题 解决方案 讨论 1.2 解压可迭代对象赋值给 ...

  6. Machine Learning with Python Cookbook 学习笔记 第9章

    Chapter 9. Dimensionality Reduction Using Feature Extraction 前言 本笔记是针对人工智能典型算法的课程中Machine Learning w ...

  7. Machine Learning with Python Cookbook 学习笔记 第6章

    Chapter 6. Handling Text 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放在代码压缩 ...

  8. 《Python Cookbook 3rd》笔记(5.13):读写压缩文件

    获取文件夹中的文件列表 问题 你想获取文件系统中某个目录下的所有文件列表. 解法 使用 os.listdir() 函数来获取某个目录中的文件列表: import os names = os.listd ...

  9. 《Python cookbook》笔记一

    <Python cookbook> 第一章 数据结构和算法 - *号解压多个变量 - 如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 ValueError .那么 怎样才能从这个可 ...

最新文章

  1. 收藏!PyTorch常用代码段合集
  2. R语言dim函数获取dataframe、matrix的维度、shape实战
  3. 给ztree节点赋值
  4. 【转】成为Java顶尖程序员 ,看这10本书就够了
  5. 【CodeForces - 1042A】Benches (优先队列,思维模拟,maxmin问题)
  6. 用matlab实现假设性检验T检验(葡萄酒评价)
  7. Ubuntu把家目录文件夹名称改为英文
  8. TOMCAT SSL 配置
  9. 【Verilog TestBench教程】
  10. 电话面试的技巧和注意事项
  11. CCF_Java_201909-3_字符画
  12. VMware 安装心得
  13. VS.Net 2005 下载地址
  14. java毕业生设计在线教育平台计算机源码+系统+mysql+调试部署+lw
  15. 服务器文件防泄密系统,数据防泄密软件解决图纸泄密问题
  16. execution常用表达式整理
  17. matlab中nargin函数的用法
  18. 华为任正非老爷子的一番话,听得我不寒而栗
  19. 【面经牛客网整理】度小满一面
  20. Android 拖拽球吸附动画,android可拖动,展示菜单,能自动吸边和半隐藏的悬浮球...

热门文章

  1. GetAdaptersInfo获取MAC地址
  2. cs架构用什么语言开发_用Rust语言开发微信小程序
  3. MySQL笔记——外键约束和表关系(一对一,多对一,多对多)
  4. arcgis计算地形起伏度
  5. Sharepoint学习笔记 –架构系列—09 Sharepoint的服务器端对象模型(Server Object Model) 1.物理对象层次结构
  6. NuGet的简单使用
  7. 并发编程(原子性、可见性、一致性)
  8. 一步步编写操作系统4 安装x86虚拟机 bochs
  9. 【POJ - 3159】Candies (差分约束,卡SPFA)
  10. 【牛客 - 551G】CSL的训练计划(二分 + 拓扑排序 + 优化卡常)