[python]转换文件编码格式

96
羽恒 F0aaab02 b2ab 48d0 ab5c 8502fb1a27a3
2018.09.27 22:40* 字数 522

文件编码格式一直是很多人特别头疼的一件事情,最近由于跨平台开发,经常出现编码格式的问题。所以关于编码格式转换采用python的方式记录下来以便后期需要。让我们一起走进python对编码格式的操作之路

编码格式介绍

  • ASCII码:使用单字节编码,所以范围基本只有英文字母、数字和一些特殊字符;只有256个字节。
  • Unicode:能够表示全世界的所有字符。
  • GBK:只用来编码汉字的,GBK全称《汉字编码扩展规范》双字节编码。
  • UTF-8:针对Unicode的可变字符编码,又称万能码。

三方库文件

chardetcodecs

库文件简介

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

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

代码转换实例

Main函数

import os
import sys
import codecs
import chardet
#将路径下面的所有文件,从原来的格式变为UTF-8的格式
def Main():
    path = '文件路径'
    (floders, files) = list_folders_files(path)
    for file in files:
        file_name =os.path.join(floders,file)
        with open(file_name, "rb") as f_in:
            data = f.read()
            code_type = chardet.detect(data)['encoding']
            file_convert(file_name,file, code_type, 'UTF-8')

文件转换代码

def convert(file_name,file, in_code="GBK", out_code="UTF-8"):
    """
    该程序用于将目录下的文件从指定格式转换到指定格式,默认的是GBK转到UTF-8
    :param file:    文件路径
    :param in_code:  输入文件格式
    :param out_code: 输出文件格式
    :return:
    """
    out_path='输出文件路径'
    try:
        with codecs.open(file_name, 'r', incode) as f_in:
            new_content = f_in.read()
            f_out = codecs.open(os.path.join(out_path,file), 'w', out_code)
            f_out.write(new_content)
            f_out.close
    except IOError as err:
        print("I/O error: {0}".format(err))

获取指定文件夹下文件

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)

Linux 命令行转换

iconv命令用于文件编码的转换,
碰到gbk编码的文件,需要转换成utf8,直接使用该命令即可。

命令用法

  • iconv --list :列出iconv支持的编码列表

语法

iconv -f 原编码 -t 新编码 filename -o newfile

参数说明

参数 参数描述
-f from 来源编码
-t to 转换后新编码
-c 忽略无效字符
-s --silent,忽略警告
-o file 可选,没有的话直接,
转换当前文件,使用-o 保留源文件

命令实例

  • 查看文件
    $ file test
    test: UTF-8 Unicode text
    
  • 转换
    $ iconv -f utf8 -t gbk test -o test.gbk
    
  • 效果
    $ file test*
    test:          UTF-8 Unicode text
    test.gbk:     ISO-8859 text
    
Python学习之路
Web note ad 1