文件编码格式转换
文件格式转换:所有的文件都可以转成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")