103.文件编码转换

文件编码格式转换

文件格式转换:所有的文件都可以转成unicode格式也就是python3中的str,之后通过编码和解码这两种方式可以转化为任何格式
比如: utf-8 <=> unicode <======>gbk ,中间必定是通用的转换格式

import codecs
import chardet


"""下面是codecs模块中的一个方法的测试"""
# data = "你好".encode("gbk")
# with codecs.open("file1.txt", "wb") as f:
#     encode_file = codecs.EncodedFile(f, data_encoding='gbk', file_encoding='utf-8')
#     # 写入数据是通过data_encoding进行解码之后,通过file_encoding进行编码之后写入文件,
#     # 所以源文件上gbk格式,通过这种方式之后变成了utf-8
#     encode_file.write(data)
#
# with codecs.open("file1.txt", "rb") as f:
#     decode_file = codecs.EncodedFile(f, data_encoding="gbk", file_encoding="utf-8")
#     # 读取数据时,通过file_encoding对文件进行解码,解码之后使用date_encoding对数据进行编码返回
#     print(decode_file.read().decode("gbk"))


def convert_file(src_path, src_encoding, dest_encoding, desc_path=None):
    """
    这个一个文件编码转换函数
    src_path: 指的是文件的路径
    src_encoding: 是文件的原来的编码格式
    dest_encoding: 是你需要将其转换成的格式
    desc_path: 默认为空时和src_path一样
    """
    if not desc_path:
        desc_path = src_path

    f_r = open(src_path, "rb+")
    src_data = f_r.read().decode(src_encoding)
    desc_data = src_data.encode(dest_encoding)

    # 本来想使用这种方式但是发现特别麻烦,传入EncodedFile的文件对象很难控制还不如原来的
    # encode_file = codecs.EncodedFile(f_r, data_encoding=src_encoding, file_encoding=dest_encoding)
    # # 写入数据是通过data_encoding进行解码之后,通过file_encoding进行编码之后写入文件,
    # # 所以源文件上gbk格式,通过这种方式之后变成了utf-8
    # data = encode_file.read()

    f_w = open(desc_path, "wb")
    f_w.write(desc_data)

    # 关闭资源
    f_r.close()
    f_w.close()


if __name__ == '__main__':
    path = r"C:UsersyztPycharmProjectsstudy1file1.txt"
    convert_file(path, "utf-8", "gbk")


原文地址:https://www.cnblogs.com/liuzhanghao/p/13819734.html