python批量转换文件编码
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
为该编码的符合度,
我需要做这样的事:
- 遍历项目中所有的
.java
文件,并检测其编码 - 备份每个
.java
文件中.java.bak
以便于恢复 - 将 .java 文件从检测到的编码格式转换成 utf-8 格式
- 提供一个恢复工具,在转换错误后能够恢复到原来的文件
- 提供一个清理工具,在确保文件转换正确后,可以清除备份的文件
其中最关键的部分在第二条,利用 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批量转换文件编码相关推荐
- python实现批量转换文件编码(批转换编码示例)
这篇文章主要介绍了python实现批量转换文件编码示例,指定文件编码.目录或扩展名即可进行转换,大家参考使用吧 # -*- coding:utf-8 -*- __author__ = 'walksky ...
- 一个批量转换文件编码的python脚本
一个批量转换文件编码的python脚本 需要将工作目录下的文件进行转码,开始的编码是GBK的,需要将其转换为utf-8的.文件较多,手动转换肯定不行,用Python写个脚本来实现.找到一段代码参考: ...
- python实现文件编码转换_Python实现批量转换文件编码的方法
本文实例讲述了Python实现批量转换文件编码的方法.分享给大家供大家参考.具体如下: 这里将某个目录下的所有文件从一种编码转换为另一种编码,然后保存 import os import shutil ...
- shell 批量转换文件编码
相信大家在平时的跨平台编程中碰到过文件编码问题,比如在Windows代码字符编码方式是GB2312,然而转到Linux却只支持utf-8,虽然对代码部分没啥影响,但是很多中文注释部分,却一片乱码,很让 ...
- 使用 windows命令和iconv.exe批量转换文件编码
使用 windows命令和iconv.exe批量转换文件编码 iconv是知名的开源跨平台编码转换库,iconv.exe是iconv库在windows下的命令行工具,iconv.exe的一般用法 ...
- 使用windows命令和iconv.exe批量转换文件编码
使用windows命令和iconv.exe批量转换文件编码 iconv是知名的开源跨平台编码转换库,iconv.exe是iconv库在windows下的命令行工具,iconv.exe的一般用法:ico ...
- node 获取文件编码,批量转换文件编码
node 批量转换文件编码 解决方案 使用 npm@jschardet 获取文件编码信息(并非 100%准确) 通过 npm@iconv-lite 结合文件二进制流,重新识别文件内容 核心代码如下: ...
- notepad批量转换文件编码utf8、gbk
从网上找了多个编码转换工具,自己也尝试写.从网上找python脚本,对文件进行批量转换,但转换结果都不理想,大部分文件都可以正常转换成UTF8,但少量文件转换后可能出现中文乱码的情况. 经过多次尝试, ...
- Python批量转换文件夹下图片为PDF
前言 最近遇到需要批量把图片转换成pdf的需求,要求转换之后输出到对应的转化目录下,由于需要转换的图片文件非常多,这就萌生了想要写个小程序的想法. 实现思路: (1)先弹窗选择对应的文件夹路径 (2) ...
最新文章
- nodejs npm常用命令
- postman断言测试脚本二 (对数据格式和内容匹配测试)
- attention retain_Attention-Aware Compositional Network
- Java 8 中处理日期和时间示例
- formal method lecture 9
- 【转载】关于GCJ-02(火星坐标系)的种种
- Python 3.6出现报错解决方案:No Python 3.6 installation was detected,无法卸载Python
- 深入了解React组件重新渲染的条件和生命周期
- 单片机oled显示浮点数函数_问中文编程在单片机上实现一个电子时钟,总共有几步?...
- php多表递归查询,使用公用表表达式的递归查询
- Oracle 各种语法(一)
- 如何设计出高端大气、有黑科技感的可视化大屏?
- 东芝笔记本linux系统安装驱动,最详实解决方案 笔记本安装驱动指南!
- ionic-vue 开发app移动端
- 信息学奥赛一本通(C++版)在线评测系统 1887:【15NOIP提高组】神奇的幻方
- #芯片# R8025(RX-8025T)
- Word中如何自动生成、更新英文目录(使用域代码)
- GEEer成长日记二:Modis_NDVI逐日和逐月时间序列分析
- MNN Interpreter and Session
- 整数:求数组Nums中只出现一次的数
热门文章
- LuaTinker向Linux移植成功
- python实现get请求 模块_python爬虫 基于requests模块发起ajax的get请求实现解析
- Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果
- 毕业五年同是程序员为什么差距这么大?他年薪百万,他月薪一万
- 19. yum 常用命令《Mr.Robot》
- 关于lazyman你还应该知道这几件事
- Js toString()方法笔记
- CocoaPods 添加第三方库报错
- 腾讯技术运营岗实习面试面经
- 为nopcommerce自定义用户积分功能(1)