为了账号安全,请及时绑定邮箱和手机立即绑定

[python]转换文件编码格式

标签:
Python

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

编码格式介绍

  • ASCII码:使用单字节编码,所以范围基本只有英文字母、数字和一些特殊字符;只有256个字节。

  • Unicode:能够表示全世界的所有字符。

  • GBK:只用来编码汉字的,GBK全称《汉字编码扩展规范》双字节编码。

  • UTF-8:针对Unicode的可变字符编码,又称万能码。

三方库文件

chardetcodecs

库文件简介

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

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

代码转换实例

Main函数

import osimport sysimport codecsimport 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 osdef 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

参数说明

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

命令实例

  • 查看文件

    $ file testtest: 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



作者:羽恒
链接:https://www.jianshu.com/p/d5030db5da0e


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消