`
greatghoul
  • 浏览: 146871 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

python批量转换文件编码

阅读更多

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 为该编码的符合度,

 

 

我需要做这样的事:

  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 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()
1
0
分享到:
评论

相关推荐

    Python批量转换文件编码格式

    ### Python批量转换文件编码格式详解 #### 背景与需求 在日常工作中,我们可能会遇到需要处理大量文件的情况,特别是在文件编码不统一时。例如,如果一批文件原本使用GBK编码,而我们的应用或系统更倾向于使用UTF-8...

    如何利用python批量转换文件编码?例如,txt文件由UTF-16LE转为UTF-8……

    本篇文章将介绍如何利用Python批量转换文件编码,以解决处理数据时遇到的编码问题。我们将以一个具体的例子来说明,即如何将TXT文件从UTF-16LE编码转换为UTF-8编码。 首先,我们要导入必要的库。`os`库用于操作文件...

    使用python批量转换文件编码为UTF-8的实现

    在尝试批量转换文件编码时,我们通常会先遍历指定目录下的所有文件,找到需要转换编码的目标文件。这里使用`os.walk()`函数可以递归遍历指定路径下的所有子目录和文件,筛选出特定扩展名的文件,如`.java`文件。 ``...

    Python实现批量转换文件编码的方法

    接下来是本文的核心部分——使用Python批量转换文件编码的具体实现。下面的代码展示了如何将指定目录下的所有文件从GBK编码转换为UTF-8编码。 ```python import os import shutil def match(config, fullpath, ...

    vs文件编码批量转换工具

    此工具可批量修改文件编码(默认gb2312转utf8,可修改) python版本:2.7 使用说明: dirGb2312ToUtf8('F:\work\MyProject\Source\MyProject') 把以上路径改为自己需要转换的文件夹即可

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

    本示例将介绍如何使用Python批量转换文件的编码格式。在处理跨语言或不同系统间的数据时,不同编码间的转换常常是必不可少的步骤。 首先,我们要了解Python中的编码处理。在Python 3中,字符串默认采用UTF-8编码。`...

    使用python批量转换文件编码为UTF-8

    由于以前脑残的我不知道改编码方式,导致出现了大量的GBK,这就很难受,要是一个两个还好说,可是这么多要是一个一个的改我会觉得现在的我比以前还脑残,于是乎,我就想用python批量的修改一下,然后就产生了这篇...

    批量文件编码转换工具

    例如,Python等编程语言提供了如`codecs`库来处理各种编码问题,可以方便地读取、写入和转换不同编码的文件。 总之,"批量文件编码转换工具"是一个实用的绿色软件,尤其对于处理大量文本文件的用户,无论是为了兼容...

    批量编码转化工具(实现文件编码的自动检测)

    工具会根据这些参数执行批量转换操作,并可能在转换完成后生成日志,记录每个文件的处理结果。 5. 编程语言和库: 这个工具可能使用Python、Java或C#等编程语言实现,因为它们都有强大的文件操作和编码处理库。...

    批量将文件编码方式由ansi转为utf-8

    对于非程序员,也有一些图形界面工具,如Notepad++的"查找和替换"功能,通过正则表达式配合替换操作,可以批量转换文件编码。 在处理这类问题时,需要注意以下几点: 1. **备份原始文件**:在进行任何编码转换之前...

    python批量修改文件编码格式的方法

    ### Python批量修改文件编码格式的方法 在日常工作中,我们经常需要处理不同编码格式的文件,尤其是在涉及多语言或历史遗留项目时。不一致的文件编码可能会导致读取错误或者显示乱码等问题。因此,掌握如何批量修改...

    字符编码GB2312转UTF8+可批量转换+需安装Python+学习Python参考

    该工具用于字符编码GB2312转UTF8,可批量转换。只需将该工具放置与需要转换文件的目录下,双击运行即可。 注意:需安装Python,Python 2和3 需安装通用编码检测器,文件内有安装方法; 该工具对于入门学习Python 也...

    批量文本编码转换

    2. **Python编程**:Python是进行文本处理和编码转换的常用语言,其内建的`codecs`模块提供了读写不同编码文件的功能,如`open()`函数的`encoding`参数可以指定文件的编码。 3. **批量操作**:通过遍历目录,使用os...

    python批量实现Word文件转换为PDF文件

    本文将详细介绍如何使用Python批量实现Word到PDF的转换。 首先,我们需要了解Python中遍历目录的方法,这是批量处理文件的基础。Python提供了多种方式来遍历一个目录及其子目录中的文件: 1. **使用`glob`模块**:...

    OFD批量转换PDF源代码

    标题中的“OFD批量转换PDF源代码”指出这是一个关于将OFD文件批量转换为PDF格式的程序源代码。OFD(Open Fixed-layout Document)是中国国家标准的电子文档格式,主要用于存储固定版面的文档,如政府文件、发票等。...

    python整合ffmpeg实现视频文件的批量转换

    我们的思路是,设定一个文件夹存放源视频文件,python读取该文件夹下的全部文件,并对文件通过ffmpeg进行分析,根据需要,修改目标文件的编码、分辨率等等,调用ffmpeg转换。 我这次的需求是,我家液晶电视只支持...

    基于python开发的编码转换工具,图形化界面基于pyside2(qt5)开发.zip

    支持批量转换任意格式的文件编码; 可将文件编码转为UTF-8 BOM 、UTF-8、GB2312中的任意一种格式;.zip 基于python开发的编码转换工具,图形化界面基于pyside2(qt5)开发。 支持批量转换任意格式的文件编码; 可将...

    python脚本批量将gdb导出为shp(修改版).docx

    根据提供的文档信息,本文将详细解释如何...通过上述脚本,我们可以方便地批量将GDB中的要素类转换为SHP文件,大大提高了数据处理的效率。此外,脚本还具有一定的灵活性和可扩展性,可以根据实际需求进行调整和优化。

Global site tag (gtag.js) - Google Analytics