via: http://www.g2w.me/2012/02/python-batch-convert-file-encodings/
今天在 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 chardet
def convert_encoding(filename, target_encoding):
# Backup the origin file.
shutil.copyfile(filename, filename + '.bak')
# convert file from the source encoding to target encoding
content = codecs.open(filename, 'r').read()
source_encoding = chardet.detect(content)['encoding']
print source_encoding, filename
content = 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 filename
def 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 source
if __name__ == '__main__':
# process_bak_files(action='clear')
main()
分享到:
相关推荐
### Python批量转换文件编码格式详解 #### 背景与需求 在日常工作中,我们可能会遇到需要处理大量文件的情况,特别是在文件编码不统一时。例如,如果一批文件原本使用GBK编码,而我们的应用或系统更倾向于使用UTF-8...
本篇文章将介绍如何利用Python批量转换文件编码,以解决处理数据时遇到的编码问题。我们将以一个具体的例子来说明,即如何将TXT文件从UTF-16LE编码转换为UTF-8编码。 首先,我们要导入必要的库。`os`库用于操作文件...
在尝试批量转换文件编码时,我们通常会先遍历指定目录下的所有文件,找到需要转换编码的目标文件。这里使用`os.walk()`函数可以递归遍历指定路径下的所有子目录和文件,筛选出特定扩展名的文件,如`.java`文件。 ``...
接下来是本文的核心部分——使用Python批量转换文件编码的具体实现。下面的代码展示了如何将指定目录下的所有文件从GBK编码转换为UTF-8编码。 ```python import os import shutil def match(config, fullpath, ...
此工具可批量修改文件编码(默认gb2312转utf8,可修改) python版本:2.7 使用说明: dirGb2312ToUtf8('F:\work\MyProject\Source\MyProject') 把以上路径改为自己需要转换的文件夹即可
本示例将介绍如何使用Python批量转换文件的编码格式。在处理跨语言或不同系统间的数据时,不同编码间的转换常常是必不可少的步骤。 首先,我们要了解Python中的编码处理。在Python 3中,字符串默认采用UTF-8编码。`...
由于以前脑残的我不知道改编码方式,导致出现了大量的GBK,这就很难受,要是一个两个还好说,可是这么多要是一个一个的改我会觉得现在的我比以前还脑残,于是乎,我就想用python批量的修改一下,然后就产生了这篇...
例如,Python等编程语言提供了如`codecs`库来处理各种编码问题,可以方便地读取、写入和转换不同编码的文件。 总之,"批量文件编码转换工具"是一个实用的绿色软件,尤其对于处理大量文本文件的用户,无论是为了兼容...
批量转换c文件编码格式python脚本
工具会根据这些参数执行批量转换操作,并可能在转换完成后生成日志,记录每个文件的处理结果。 5. 编程语言和库: 这个工具可能使用Python、Java或C#等编程语言实现,因为它们都有强大的文件操作和编码处理库。...
对于非程序员,也有一些图形界面工具,如Notepad++的"查找和替换"功能,通过正则表达式配合替换操作,可以批量转换文件编码。 在处理这类问题时,需要注意以下几点: 1. **备份原始文件**:在进行任何编码转换之前...
### Python批量修改文件编码格式的方法 在日常工作中,我们经常需要处理不同编码格式的文件,尤其是在涉及多语言或历史遗留项目时。不一致的文件编码可能会导致读取错误或者显示乱码等问题。因此,掌握如何批量修改...
该工具用于字符编码GB2312转UTF8,可批量转换。只需将该工具放置与需要转换文件的目录下,双击运行即可。 注意:需安装Python,Python 2和3 需安装通用编码检测器,文件内有安装方法; 该工具对于入门学习Python 也...
2. **Python编程**:Python是进行文本处理和编码转换的常用语言,其内建的`codecs`模块提供了读写不同编码文件的功能,如`open()`函数的`encoding`参数可以指定文件的编码。 3. **批量操作**:通过遍历目录,使用os...
本文将详细介绍如何使用Python批量实现Word到PDF的转换。 首先,我们需要了解Python中遍历目录的方法,这是批量处理文件的基础。Python提供了多种方式来遍历一个目录及其子目录中的文件: 1. **使用`glob`模块**:...
标题中的“OFD批量转换PDF源代码”指出这是一个关于将OFD文件批量转换为PDF格式的程序源代码。OFD(Open Fixed-layout Document)是中国国家标准的电子文档格式,主要用于存储固定版面的文档,如政府文件、发票等。...
我们的思路是,设定一个文件夹存放源视频文件,python读取该文件夹下的全部文件,并对文件通过ffmpeg进行分析,根据需要,修改目标文件的编码、分辨率等等,调用ffmpeg转换。 我这次的需求是,我家液晶电视只支持...
支持批量转换任意格式的文件编码; 可将文件编码转为UTF-8 BOM 、UTF-8、GB2312中的任意一种格式;.zip 基于python开发的编码转换工具,图形化界面基于pyside2(qt5)开发。 支持批量转换任意格式的文件编码; 可将...