浅谈Python2获取中文文件名的编码问题


Posted in Python onJanuary 09, 2018

问题:

Python2获取包含中文的文件名是如果不转码会出现乱码。

这里假设要测试的文件夹名为test,文件夹下有5个文件名包含中文的文件分别为:

Python性能分析与优化.pdf

Python数据分析与挖掘实战.pdf

Python编程实战:运用设计模式、并发和程序库创建高质量程序.pdf

流畅的Python.pdf

编写高质量Python代码的59个有效方法.pdf

我们先不转码直接打印获取到的文件名,代码如下:

import os
for file in os.listdir('./test'):
 print(file)

输出乱码:

Python���ܷ������Ż�.pdf
Python���ݷ������ھ�ʵս.pdf
Python���ʵս���������ģʽ�������ͳ���ⴴ������������.pdf
������Python.pdf
�������Python�����59��������.pdf

解决:

先测试一下文件名的编码,这里我们用到chardet模块,安装命令:

pip install chardet

用chardet.detect函数检测一下文件名的编码方式:

{'confidence': 0.99, 'encoding': 'GB2312'}
{'confidence': 0.99, 'encoding': 'GB2312'}
{'confidence': 0.99, 'encoding': 'GB2312'}
{'confidence': 0.73, 'encoding': 'windows-1252'}
{'confidence': 0.99, 'encoding': 'GB2312'}

可以看出编码GB2312的置信度最大,下面我们用GB2312编码来解码文件名,代码如下:

import os
import chardet
for file in os.listdir('./test'):
 r = file.decode('GB2312')
 print(r)

输出:

Python性能分析与优化.pdf

Python数据分析与挖掘实战.pdf

Python编程实战:运用设计模式、并发和程序库创建高质量程序.pdf

流畅的Python.pdf

编写高质量Python代码的59个有效方法.pdf

经过编码之后,文件名打印正确。

PS:chardet.detect检测的字符串越长越准确,越短越不准确

这里还有一个问题是上面的代码是在Windows下测试,Linux下文件名编码是utf-8,为了兼容Windows和Linux,代码需要修改一下,下面我们把代码封装到函数中:

# -*- coding: utf-8 -*-
import os

def get_filename_from_dir(dir_path):
 file_list = []
 if not os.path.exists(dir_path):
  return file_list
 for item in os.listdir(dir_path):
  basename = os.path.basename(item)
  # print(chardet.detect(basename)) # 找出文件名编码,文件名包含有中文
  # windows下文件编码为GB2312,linux下为utf-8
  try:
   decode_str = basename.decode("GB2312")
  except UnicodeDecodeError:
   decode_str = basename.decode("utf-8")
  file_list.append(decode_str)
 return file_list
# 测试代码
r = get_filename_from_dir('./test')
for i in r:
 print(i)

先用GB2312解码,如果出错再用utf-8解码,这样就兼容了Windows和Linux(在Win7和Ubuntu16.04测试通过)。

以上这篇浅谈Python2获取中文文件名的编码问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
flask中使用SQLAlchemy进行辅助开发的代码
Feb 10 Python
Python爬取国外天气预报网站的方法
Jul 10 Python
详解Python字符串对象的实现
Dec 24 Python
Python读取指定目录下指定后缀文件并保存为docx
Apr 23 Python
详解如何利用Cython为Python代码加速
Jan 27 Python
python模拟表单提交登录图书馆
Apr 27 Python
python3读取csv和xlsx文件的实例
Jun 22 Python
python去除拼音声调字母,替换为字母的方法
Nov 28 Python
python将字符串转换成json的方法小结
Jul 09 Python
Python制作简易版小工具之计算天数的实现思路
Feb 13 Python
Python类的继承super相关原理解析
Oct 22 Python
python 使用pandas读取csv文件的方法
Dec 24 Python
在CentOS6上安装Python2.7的解决方法
Jan 09 #Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
Jan 09 #Python
用tensorflow实现弹性网络回归算法
Jan 09 #Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
Jan 08 #Python
python matplotlib 注释文本箭头简单代码示例
Jan 08 #Python
Python自定义简单图轴简单实例
Jan 08 #Python
[原创]python爬虫(入门教程、视频教程)
Jan 08 #Python
You might like
随机头像PHP版
2006/10/09 PHP
php sprintf()函数让你的sql操作更安全
2008/07/23 PHP
phpize的深入理解
2013/06/03 PHP
解析PHP计算页面执行时间的实现代码
2013/06/18 PHP
在网页中屏蔽快捷键
2006/09/06 Javascript
jquery1.4 教程二 ajax方法的改进
2010/02/25 Javascript
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
2010/04/15 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
2013/06/25 Javascript
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
jquery Ajax 实现加载数据前动画效果的示例代码
2014/02/07 Javascript
js 获取input点选按钮的值的方法
2014/04/14 Javascript
jquery自定义下拉列表示例
2014/04/25 Javascript
用循环或if语句从json中取数据示例
2014/08/18 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
JavaScript文件的同步和异步加载的实现代码
2017/08/19 Javascript
解决vue-cli + webpack 新建项目出错的问题
2018/03/20 Javascript
基于JS实现一个随机生成验证码功能
2019/05/29 Javascript
原生js代码能实现call和bind吗
2019/07/31 Javascript
一个手写的vue放大镜效果
2019/08/09 Javascript
详解Vue的watch中的immediate与watch是什么意思
2019/12/30 Javascript
vue el-tree 默认展开第一个节点的实现代码
2020/05/15 Javascript
Paypal支付不完全指北
2020/06/04 Javascript
[03:26]回顾2015国际邀请赛中国区预选赛
2015/06/09 DOTA
[05:31]DOTA2上海特级锦标赛主赛事第三日RECAP
2016/03/05 DOTA
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
python简单操作excle的方法
2018/09/12 Python
pytorch 中的重要模块化接口nn.Module的使用
2020/04/02 Python
探究 canvas 绘图中撤销(undo)功能的实现方式详解
2018/05/17 HTML / CSS
HTML5学习心得总结(推荐)
2016/07/08 HTML / CSS
CK巴西官方网站:Calvin Klein巴西
2019/07/19 全球购物
ORLY官网:美国专业美甲一线品牌
2019/12/11 全球购物
总经理司机岗位职责
2014/02/06 职场文书
大型主题婚礼活动策划方案
2014/09/15 职场文书
机关干部三严三实心得体会
2014/10/13 职场文书
小学二年级班主任工作经验交流材料
2015/11/02 职场文书