python批量转换文件编码

 
3年之前 
 python

今天在 eclipse 中导入了个之前的 swing 项目,结果跑起来后乱码,检查代码发现竟然一部分 java 文件是 utf-8 编码,一部分却 是 gb2312 的,而文件又比较多,一个一个去看显示太麻烦了,于是又该 python 出手了。

这里需要用到一个 python 的库 chardet 1.0.1 ,用于自动检测文件的编码,使用起来非常方便。

>>> import chardet
>>> chardet.detect(open(r'E:\Workspaces\java\GCHMCreator\main\g2w\app\gchm\gui\ContentElement.java').read())
{'confidence': 0.99, 'encoding': 'GB2312'}

detect 文件返回的是一个字典,其中 encoding 的值为检测到的编码类型,confidence 为该编码的符合度,

我需要做这样的事:

  1. 遍历项目中所有的 .java 文件,并检测其编码
  2. 备份每个 .java 文件中 .java.bak 以便于恢复
  3. 将 .java 文件从检测到的编码格式转换成 utf-8 格式
  4. 提供一个恢复工具,在转换错误后能够恢复到原来的文件
  5. 提供一个清理工具,在确保文件转换正确后,可以清除备份的文件

其中最关键的部分在第二条,利用 chardet 检测出文件的编码 source_encoding,将文本内容通过 source_encoding decode 成 unicode ,再利用 codecs 将文件输出成正确的编码格式。

完整代码

#-*- coding: utf-8 -*-import codecs
import os
import shutil
import re
import chardetdef convert_encoding(filename, target_encoding):# Backup the origin file.shutil.copyfile(filename, filename + '.bak')# convert file from the source encoding to target encodingcontent = codecs.open(filename, 'r').read()source_encoding = chardet.detect(content)['encoding']print source_encoding, filenamecontent = content.decode(source_encoding) #.encode(source_encoding)codecs.open(filename, 'w', encoding=target_encoding).write(content)def main():for root, dirs, files in os.walk(os.getcwd()):for f in files:if f.lower().endswith('.java'):filename = os.path.join(root, f)try:convert_encoding(filename, 'utf-8')except Exception, e:print filenamedef process_bak_files(action='restore'):for root, dirs, files in os.walk(os.getcwd()):for f in files:if f.lower().endswith('.java.bak'):source = os.path.join(root, f)target = os.path.join(root, re.sub('\.java\.bak$', '.java', f, flags=re.IGNORECASE))try:if action == 'restore':shutil.move(source, target)elif action == 'clear':os.remove(source)except Exception, e:print sourceif __name__ == '__main__':# process_bak_files(action='clear')main()

python批量转换文件编码相关推荐

  1. python实现批量转换文件编码(批转换编码示例)

    这篇文章主要介绍了python实现批量转换文件编码示例,指定文件编码.目录或扩展名即可进行转换,大家参考使用吧 # -*- coding:utf-8 -*- __author__ = 'walksky ...

  2. 一个批量转换文件编码的python脚本

    一个批量转换文件编码的python脚本 需要将工作目录下的文件进行转码,开始的编码是GBK的,需要将其转换为utf-8的.文件较多,手动转换肯定不行,用Python写个脚本来实现.找到一段代码参考: ...

  3. python实现文件编码转换_Python实现批量转换文件编码的方法

    本文实例讲述了Python实现批量转换文件编码的方法.分享给大家供大家参考.具体如下: 这里将某个目录下的所有文件从一种编码转换为另一种编码,然后保存 import os import shutil ...

  4. shell 批量转换文件编码

    相信大家在平时的跨平台编程中碰到过文件编码问题,比如在Windows代码字符编码方式是GB2312,然而转到Linux却只支持utf-8,虽然对代码部分没啥影响,但是很多中文注释部分,却一片乱码,很让 ...

  5. 使用 windows命令和iconv.exe批量转换文件编码

    使用 windows命令和iconv.exe批量转换文件编码    iconv是知名的开源跨平台编码转换库,iconv.exe是iconv库在windows下的命令行工具,iconv.exe的一般用法 ...

  6. 使用windows命令和iconv.exe批量转换文件编码

    使用windows命令和iconv.exe批量转换文件编码 iconv是知名的开源跨平台编码转换库,iconv.exe是iconv库在windows下的命令行工具,iconv.exe的一般用法:ico ...

  7. node 获取文件编码,批量转换文件编码

    node 批量转换文件编码 解决方案 使用 npm@jschardet 获取文件编码信息(并非 100%准确) 通过 npm@iconv-lite 结合文件二进制流,重新识别文件内容 核心代码如下: ...

  8. notepad批量转换文件编码utf8、gbk

    从网上找了多个编码转换工具,自己也尝试写.从网上找python脚本,对文件进行批量转换,但转换结果都不理想,大部分文件都可以正常转换成UTF8,但少量文件转换后可能出现中文乱码的情况. 经过多次尝试, ...

  9. Python批量转换文件夹下图片为PDF

    前言 最近遇到需要批量把图片转换成pdf的需求,要求转换之后输出到对应的转化目录下,由于需要转换的图片文件非常多,这就萌生了想要写个小程序的想法. 实现思路: (1)先弹窗选择对应的文件夹路径 (2) ...

最新文章

  1. nodejs npm常用命令
  2. postman断言测试脚本二 (对数据格式和内容匹配测试)
  3. attention retain_Attention-Aware Compositional Network
  4. Java 8 中处理日期和时间示例
  5. formal method lecture 9
  6. 【转载】关于GCJ-02(火星坐标系)的种种
  7. Python 3.6出现报错解决方案:No Python 3.6 installation was detected,无法卸载Python
  8. 深入了解React组件重新渲染的条件和生命周期
  9. 单片机oled显示浮点数函数_问中文编程在单片机上实现一个电子时钟,总共有几步?...
  10. php多表递归查询,使用公用表表达式的递归查询
  11. Oracle 各种语法(一)
  12. 如何设计出高端大气、有黑科技感的可视化大屏?
  13. 东芝笔记本linux系统安装驱动,最详实解决方案 笔记本安装驱动指南!
  14. ionic-vue 开发app移动端
  15. 信息学奥赛一本通(C++版)在线评测系统 1887:【15NOIP提高组】神奇的幻方
  16. #芯片# R8025(RX-8025T)
  17. Word中如何自动生成、更新英文目录(使用域代码)
  18. GEEer成长日记二:Modis_NDVI逐日和逐月时间序列分析
  19. MNN Interpreter and Session
  20. 整数:求数组Nums中只出现一次的数

热门文章

  1. LuaTinker向Linux移植成功
  2. python实现get请求 模块_python爬虫 基于requests模块发起ajax的get请求实现解析
  3. Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果
  4. 毕业五年同是程序员为什么差距这么大?他年薪百万,他月薪一万
  5. 19. yum 常用命令《Mr.Robot》
  6. 关于lazyman你还应该知道这几件事
  7. Js toString()方法笔记
  8. CocoaPods 添加第三方库报错
  9. 腾讯技术运营岗实习面试面经
  10. 为nopcommerce自定义用户积分功能(1)