文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python的文本文件转换编码问题怎么解决

2023-07-06 05:16

关注

这篇文章主要介绍“Python的文本文件转换编码问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python的文本文件转换编码问题怎么解决”文章能帮助大家解决问题。

测试数据

Python的文本文件转换编码问题怎么解决

Python的文本文件转换编码问题怎么解决

注:测试文本采用UTF-8编码,通常汉字是占三个字节。GBK中汉字通常是占2个字节。

编码转换代码

import os# 对于单个文件进行操作的函数,如果需要对文件夹进行操作,可以使用一个函数包装它,这样不用修改本函数,即达到扩展的目的了。def transfer_encode(source_path, target_path, source_encode='GBK', target_encode='UTF-8'):    with open(source_path, mode='r', errors='ignore', encoding=source_encode) as source_file:  # 读取文件时,如果直接忽略报错,则程序正常执行,但是文件已经损坏了。        with open(target_path, mode='w', encoding=target_encode) as target_file:               # 所以,应该捕获异常,停止程序执行。            line = source_file.readline()            while line != '':                target_file.write(line)                line = source_file.readline()    print("Execute End!")# 这个函数的功能和上面是一样的,区别在于它是以二进制读取的,然后解码、转码再写入的def transfer_encode2(source_path, target_path, source_encode='GBK', target_encode='UTF-8'):    with open(source_path, mode='rb') as source_file:        with open(target_path, mode="wb") as target_file:            bs = source_file.read(1024)            while len(bs) != 0:                target_file.write(bs.decode(source_encode).encode(target_encode))                bs = source_file.read(1024)    print("Execute End!")source_path = r'C:\Users\Alfred\Desktop\test_data\test\data.txt'target_path = r'C:\Users\Alfred\Desktop\test_data\test\data1.txt'transfer_encode(source_path=source_path, target_path=target_path, source_encode="UTF-8", target_encode="GBK")# transfer_encode2(source_path=source_path, target_path=target_path)# 在cmd中使用 type命令,可以查看文件的内容,并且使用cmd默认的编码。# 使用 chcp 命令可以查看当前使用的编码的数字编号

执行结果

控制台输出 这个函数执行的输出没有什么意义,只是我要知道它执行了没,所以打印的。

Python的文本文件转换编码问题怎么解决

测试文件夹 data1.txt是转换编码后的文本。

Python的文本文件转换编码问题怎么解决

Python的文本文件转换编码问题怎么解决

从生成的文件来看,因为只含有一个字,所以只比较大小就知道是否转换成功了。当然了,直接打开查看也是可以的,但是直接打开查看的话,没有什么效果,都会显示一个汉字。所以,这里我们另辟蹊径,使用不一样的查看方式!

Python的文本文件转换编码问题怎么解决

注意:data.txt是采用的UTF-8编码的,而data1.txt是采用的GBK编码的。因为国内使用的Windows默认采用的中国的编码方式,所以它显示不了UTF-8编码的文本。第三个输出是查看当前使用的编码,它返回的是编码的代号,详见下图:

Python的文本文件转换编码问题怎么解决

注:GBK是兼容GB2312的编码。

说明

使用python的话,对于单个文件进行编码转换,只需要7行代码就够了!上面我写了两个函数,但是功能是一样的,区别在于第一个函数是以特定的编码方式读取文本信息,然后直接以另一种编码方式写入。第二个函数是以二进制形式读取文件内容,然后解码再转码写入。它的原理都是一样的,即必须包括依次解码和转码操作。

编码、解码、字符集本身是很复杂的,往深入了讲我也不会了。这里可以这样简化理解,两个不同编码的字符集具有相同的字符,所以将UTF-8编码文件读取出来,是为了得到它映射的字符,然后再写入,是为了将它映射为另一种编码字符集,所以说字符类似于中转站的功能。 而直接使用一种字符集去读取另一种字符集的内容,就会出现上面cmd中显示的乱码。

Python的文本文件转换编码问题怎么解决

PS: 所以,也可以解释一个问题,即为什么打开一个大的文本文件,会导致程序卡死!因为一个大的文本文件,里面包含了很多需要解码的字符。这就和排队有点类似,每一个字符等待被解码,虽然处理一个字符很快,但是一个大的文本文件,包含了大量的字符。例如,notepad++打开大文本毫无压力, 我打开这个超大型的文本,还是直接把它卡死了!(这里的排队只是一个比喻,实际的情况我也不太清楚,但是它一定是需要挨个处理的。)

Python的文本文件转换编码问题怎么解决

我们对其进行估计,假设所有字符都是中文(实际的话,还是包含一些英文的,当总的来说还是中文占多数。)这里显示是大约5千万的字符需要解码,所以计算机处理起来仍然是很吃力的,notepad++可以查看摘要,但是直接打开就卡死了,这里就不进行尝试了。

Python的文本文件转换编码问题怎么解决

关于“Python的文本文件转换编码问题怎么解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯