前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Python]转换文件编码

[Python]转换文件编码

作者头像
祥知道
发布2020-03-10 15:16:30
1.3K0
发布2020-03-10 15:16:30
举报
文章被收录于专栏:祥的专栏祥的专栏

原创文章,欢迎转载。转载请注明:转载自 祥的博客

原文链接:http://blog.csdn.net/humanking7/article/details/78501474


需求

有时候想要把代码放到平板或是手机上观看,但是相应的阅读软件支持编码为UTF-8格式的文件,类似GBK等编码格式里的汉字都会呈现乱码状态。手动用Notepad++转换很方便,但是批量处理就很尴尬了,由此引出本篇blog

需要的库

chardetcodecs

简介

引用codecs介绍如下

在Python中,codecs模块提供了实现这些规则的方法,通过模块公开的方法我们能够方便地获取某种编码方式的Encoder和 Decoder工厂函数(Factory function),以及StreamReader、StreamWriter和StreamReaderWriter类。

引用chardet介绍如下

在处理字符串时,常常会遇到不知道字符串是何种编码,如果不知道字符串的编码就不能将字符串转换成需要的编码。面对多种不同编码的输入方式,是否会有一种有效的编码方式?chardet是一个非常优秀的编码识别模块。

安装

codecs模块直接导入就可以了

代码语言:javascript
复制
import codecs

安装chardet模块

  1. 推荐地址: http://download.csdn.net/download/aqwd2008/4256178
  2. 官方地址: http://pypi.python.org/pypi/chardet
代码语言:javascript
复制
pip install chardet

安装成功:

install
install

导入

代码语言:javascript
复制
import chardet

代码

主程序:

代码语言:javascript
复制
import os
import sys
import codecs
import chardet
from subFunc_tools import *

#将路径下面的所有文件,从原来的格式变为UTF-8的格式

if __name__ == "__main__":
    path = r'D:\Code_Sources\Python_PyCharm\convert_GBK_UTF-8\test_txt'
    (list_folders, list_files) = list_folders_files(path)

    print("Path: " + path)
    for fileName in list_files:
        filePath = path + '\\' + fileName
        with open(filePath, "rb") as f:
            data = f.read()
            codeType = chardet.detect(data)['encoding']
            convert(filePath, codeType, 'UTF-8')

转换代码

代码语言:javascript
复制
import os
import sys
import codecs
import chardet
from subFunc_tools import *

def convert(file, in_enc="GBK", out_enc="UTF-8"):
    """
    该程序用于将目录下的文件从指定格式转换到指定格式,默认的是GBK转到utf-8
    :param file:    文件路径
    :param in_enc:  输入文件格式
    :param out_enc: 输出文件格式
    :return:
    """
    in_enc = in_enc.upper()
    out_enc = out_enc.upper()
    try:
        print("convert [ " + file.split('\\')[-1] + " ].....From " + in_enc + " --> " + out_enc )
        f = codecs.open(file, 'r', in_enc)
        new_content = f.read()
        codecs.open(file, 'w', out_enc).write(new_content)
    # print (f.read())
    except IOError as err:
        print("I/O error: {0}".format(err))

获取指定文件夹内的所有文件名

代码语言:javascript
复制
import os

def list_folders_files(path):
    """
    返回 "文件夹" 和 "文件" 名字

    :param path: "文件夹"和"文件"所在的路径
    :return:  (list_folders, list_files)
            :list_folders: 文件夹
            :list_files: 文件
    """
    list_folders = []
    list_files = []
    for file in os.listdir(path):
        file_path = os.path.join(path, file)
        if os.path.isdir(file_path):
            list_folders.append(file)
        else:
            list_files.append(file)
    return (list_folders, list_files)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 需求
  • 需要的库
    • 简介
      • 安装
        • codecs模块直接导入就可以了
        • 安装chardet模块
    • 代码
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档