Python 忽略文件名编码的方法

作者:David Beazley 时间:2021-06-11 15:16:55 

问题

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

标签:Python,忽略,文件名,编码
0
投稿

猜你喜欢

  • 再谈Python中的字符串与字符编码(推荐)

    2023-06-15 23:25:08
  • ASP实现网站智能分词搜索

    2007-10-18 13:50:00
  • 深入解析PYTHON 虚拟机令人拍案叫绝的字节码设计

    2023-09-02 16:13:21
  • ASP使用MYSQL数据库全攻略

    2009-11-08 18:27:00
  • JavaScript框架比较:DOM遍历

    2010-04-23 14:41:00
  • Python发送form-data请求及拼接form-data内容的方法

    2022-11-14 09:55:15
  • Python实现读取文件的方法总结

    2021-05-04 00:56:26
  • python可以美化表格数据输出结果的两个工具

    2022-06-05 02:33:32
  • Python将多个excel表格合并为一个表格

    2021-10-18 22:50:22
  • pandas时间序列之如何将int转换成datetime格式

    2023-03-09 07:50:34
  • 教你快速掌握更改表中列顺序的好方法

    2008-11-27 17:14:00
  • WEB打印大全

    2023-06-30 14:35:15
  • python基础知识之字典(Dict)

    2023-08-25 20:01:44
  • 使用python制作游戏下载进度条的代码(程序说明见注释)

    2023-06-15 00:39:52
  • pycharm 批量修改变量名称的方法

    2021-09-07 22:48:29
  • python 使用OpenCV进行简单的人像分割与合成

    2021-06-16 20:46:39
  • python实现简单的飞机大战

    2023-07-08 09:16:10
  • Python中一些自然语言工具的使用的入门教程

    2023-08-31 06:17:01
  • asp中格式化HTML函数代码 SDCMS加强版

    2011-02-20 11:18:00
  • python之线程通过信号pyqtSignal刷新ui的方法

    2022-01-03 22:28:45
  • asp之家 网络编程 m.aspxhome.com