用 Python 删除文件中的乱码
2023-03-31 10:30:30 时间
当我们用 Python 来处理有乱码的文件时,经常会遇到编码错误,有时候不得不加一个 errors = 'ignore'
参数来忽略错误,今天分享一下如何用 Python 来删除这些乱码,得到一个干净的文件。
先说下思路:用二进制方式打开文件,这样就不会出现编码问题,然后读取每一个字节,只要这个字节不在我们使用编码的范围内,就把它踢掉,然后保存剩下的字节,我们得到的就是一个干净的文件。
比如说这样 ascii 编码的文件,它含有乱码:
处理之后是这样的:
代码是这样写的:
import struct
def is_good_byte(b):
"""
可以自定义什么是好字节,比如 GBK 的字节范围可以在这里定义好
"""
return b <= 127
def clean_bytes(bs):
return filter(is_good_byte, bs)
def clean_file_bin():
with open("names.txt", mode = "rb") as reader:
with open("cleaned_names.txt", mode = "wb") as writer:
for line in reader:
for byte in clean_bytes(line):
writer.write(struct.pack('B',byte))
if __name__ == '__main__':
clean_file_bin()
上面这段代码是一个字节一个字节来处理的,如果是多字节编码,可以自行修改代码逻辑,比如一次读取 3 个字节,判断这三个字节是否一个合法的字节组合。
对于中英文混合的,比如:
>>> x
'abc中国'
>>> x.encode("GBK")
b'abcxd6xd0xb9xfa'
>>> for i in x.encode("GBK"):
... print(i)
...
97
98
99
214
208
185
250
>>>
需要综合判断,先判断是否英文字母,是的就放行,然后看接下来的两个字节是否在 GBK 的编码范围之内,是的就放行,不是就要删除,看看是删除一个字节,还是两个字节就要继续判断了。删除的依据就是不会造成更多乱码。
相关文章
- Jython 2.7 alpha1 发布
- 构造器的执行顺序
- PHP file_exists有多坑爹
- CentOS上搭建Python开发环境
- 如何提升LINQ的查询性能(上)
- SpringMVC:认识MVC了解URL映射到页面文件全过程
- 【UVM COOKBOOK】Sequences||激励
- 一款强大的可视化分布式数据同步工具
- Python 爬虫进阶必备 | 某行业研究数据库的返回值加密分析
- 网站开发历程:云吸一只猫
- PyPy 1.8发布 优秀的Python解释器
- Python业务分析实战|共享单车数据挖掘
- 24 个好用到爆的 Python 实用技巧!
- 中芯国际人事震荡,多位高管辞任;国内首家获批元宇宙行业协会揭牌;滴滴否认准备重新推出手机App
- Postman被低估的功能,接口自动化测试效率杠杆的!
- Python语法
- 一文教你用 Python 对 Excel文件进行批量操作
- PostgreSQL 通过python 监控逻辑复制
- Spark sql逻辑执行计划优化器——EliminateOuterJoin【消除outerjoin】
- 使用Python移动和重命名Excel文件