使用python的chardet库获得文件编码并修改编码


Posted in Python onJanuary 22, 2014

首先需要安装chardet库,有很多方式,我才用的是比较笨的方式:sudo pip install chardet

#!/usr/bin/env python
# coding: UTF-8
import sys
import os
import chardet 
def print_usage():

print '''usage:

change_charset [file|directory] [charset] [output file]\n

for example:

  change 1.txt utf-8 n1.txt

  change 1.txt utf-8

  change . utf-8

  change 1.txt
'''
def get_charset(s):

return chardet.detect(s)['encoding']
 
def remove(file_name):

os.remove(file_name)
 
def change_file_charset(file_name, output_file_name, charset):

f = open(file_name)

s = f.read()

f.close()

if file_name == output_file_name or output_file_name == "":


remove(file_name)

old_charset = get_charset(s)

u = s.decode(old_charset)

if output_file_name == "":


output_file_name = file_name

f = open(output_file_name, 'w')

s = u.encode(charset)

f.write(s)

f.close()
 
def do(file_name, output_file_name, charset):

if os.path.isdir(file_name):


for item in os.listdir(file_name):



try:




if os.path.isdir(file_name+"/"+item):





do(file_name+"/"+item, "", charset)




else:





change_file_charset(file_name+"/"+item, "", charset)



except OSError, e:




print e

else:


change_file_charset(file_name, output_file_name, charset)
 
if __name__ == '__main__':

length = len(sys.argv)

if length == 1:


print_usage()

elif length == 2:


do(sys.argv[1], "", "utf-8")

elif length == 3:


do(sys.argv[1], "", sys.argv[2])

elif length == 4:


do(sys.argv[1], sys.argv[3], sys.argv[2])

else:


print_usage()
Python 相关文章推荐
Python字典实现简单的三级菜单(实例讲解)
Jul 31 Python
Python中进程和线程的区别详解
Oct 29 Python
python 用正则表达式筛选文本信息的实例
Jun 05 Python
python 获取页面表格数据存放到csv中的方法
Dec 26 Python
Django ModelForm组件使用方法详解
Jul 23 Python
python按行读取文件并找出其中指定字符串
Aug 08 Python
python 实现目录复制的三种小结
Dec 04 Python
django有外键关系的两张表如何相互查找
Feb 10 Python
Python 读取xml数据,cv2裁剪图片实例
Mar 10 Python
python实现俄罗斯方块游戏(改进版)
Mar 13 Python
使用python客户端访问impala的操作方式
Mar 28 Python
python对输出的奇数偶数排序实例代码
Dec 04 Python
使用go和python递归删除.ds store文件的方法
Jan 22 #Python
python学习手册中的python多态示例代码
Jan 21 #Python
python pdb调试方法分享
Jan 21 #Python
python发送邮件接收邮件示例分享
Jan 21 #Python
python逐行读取文件内容的三种方法
Jan 20 #Python
c++生成dll使用python调用dll的方法
Jan 20 #Python
python中getattr函数使用方法 getattr实现工厂模式
Jan 20 #Python
You might like
PHP删除非空目录的函数代码小结
2013/02/28 PHP
PHP里的单例类写法实例
2015/06/25 PHP
Gambit vs CL BO3 第三场 2.13
2021/03/10 DOTA
URL编码转换,escape() encodeURI() encodeURIComponent()
2006/12/27 Javascript
动态调用CSS文件的JS代码
2010/07/29 Javascript
JavaScript中的细节分析
2012/06/30 Javascript
js仿百度有啊通栏展示效果实现代码
2013/05/28 Javascript
jquery click([data],fn)使用方法实例介绍
2013/07/08 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
jQuery实现边框动态效果的实例代码
2016/09/23 Javascript
微信小程序 安全包括(框架、功能模块、账户使用)详解
2017/01/16 Javascript
jQuery实现获取隐藏div高度的方法示例
2017/02/09 Javascript
详解在 Angular 项目中添加 clean-blog 模板
2017/07/04 Javascript
vue-baidu-map 进入页面自动定位的解决方案(推荐)
2018/04/28 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
2018/08/01 Javascript
对 Vue-Router 进行单元测试的方法
2018/11/05 Javascript
nodejs基础之buffer缓冲区用法分析
2018/12/26 NodeJs
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
js中值引用和地址引用实例分析
2019/06/21 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
2019/08/20 Javascript
解决layui动态添加的元素click等事件触发不了的问题
2019/09/20 Javascript
js实现内置计时器
2019/12/16 Javascript
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
2021/02/23 Vue.js
pandas 读取各种格式文件的方法
2018/06/22 Python
对python3 一组数值的归一化处理方法详解
2018/07/11 Python
Python对CSV、Excel、txt、dat文件的处理
2018/09/18 Python
tensorflow 报错unitialized value的解决方法
2020/02/06 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
Sofmap官网:日本著名的数码电器专卖店
2017/05/19 全球购物
活动总结模板
2014/05/09 职场文书
弘扬雷锋精神演讲稿
2014/05/10 职场文书
人事任命书格式
2014/06/05 职场文书
计算机软件专业求职信
2014/06/10 职场文书
办理房产证委托书
2014/09/18 职场文书
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python