Bootstrap

如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8

如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8

在日常开发中,我们经常会遇到不同编码格式的文件,比如 UTF-8ASCIIWindows-1252ISO-8859-1 等。文件编码不一致可能导致读取或处理文件时出现乱码,特别是在批量处理数据文件时。因此,将文件编码统一为 UTF-8 是非常有必要的。

本篇文章将带您一步步使用 Python 来批量检测 .jsonl 文件的编码类型,并将非 UTF-8 编码的文件转换为 UTF-8,确保所有文件的编码一致性。

作者简介


猫头虎是谁?

大家好,我是 猫头虎,猫头虎技术团队创始人,也被大家称为猫哥。我目前是COC北京城市开发者社区主理人COC西安城市开发者社区主理人,以及云原生开发者社区主理人,在多个技术领域如云原生、前端、后端、运维和AI都具备丰富经验。

我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用方法、前沿科技资讯、产品评测、产品使用体验,以及产品优缺点分析、横向对比、技术沙龙参会体验等。我的分享聚焦于云服务产品评测、AI产品对比、开发板性能测试和技术报告

目前,我活跃在CSDN、51CTO、腾讯云、阿里云开发者社区、知乎、微信公众号、视频号、抖音、B站、小红书等平台,全网粉丝已超过30万。我所有平台的IP名称统一为猫头虎猫头虎博主

我希望通过我的分享,帮助大家更好地掌握和使用各种技术产品,提升开发效率与体验。


猫头虎分享python


作者名片 ✍️

  • 博主猫头虎
  • 全网搜索关键词猫头虎
  • 作者微信号Libin9iOak
  • 作者公众号猫头虎技术团队
  • 更新日期2024年10月10日
  • 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能!

加入我们AI共创团队 🌐

加入猫头虎的共创圈,一起探索编程世界的无限可能! 🚀


猫头虎分享PYTHON

正文


使用 Python 检测文件编码

准备工具

在 Python 中,我们可以使用 chardet 库来检测文件的编码。这个库非常实用,它能够自动检测文件的编码类型。首先,我们需要安装 chardet 库:

pip install chardet

编写编码检测代码

首先,我们编写一个 Python 脚本,遍历指定文件夹中的 .jsonl 文件,并检测每个文件的编码类型。我们会将所有检测到的编码类型去重,并输出唯一的编码类型到控制台,便于分析文件的编码分布情况。

import os
import chardet

def detect_encoding(file_path):
    # 检测文件编码
    with open(file_path, 'rb') as f:
        raw_data = f.read()
        result = chardet.detect(raw_data)
        return result['encoding']

# 指定文件夹路径
folder_path = "C:/path/to/your/jsonl_files"
encoding_results = set()  # 使用集合去重

# 遍历文件夹中的所有 .jsonl 文件并检测编码
for filename in os.listdir(folder_path):
    if filename.endswith(".jsonl"):
        file_path = os.path.join(folder_path, filename)
        encoding = detect_encoding(file_path)
        encoding_results.add(encoding)  # 添加到集合中,自动去重
        print(f"文件: {filename} 编码: {encoding}")

# 输出唯一的编码类型到控制台
print("\n唯一的编码类型:")
for encoding in encoding_results:
    print(encoding)

代码解析

  1. 编码检测函数detect_encoding 函数使用 chardet 库检测文件的编码类型,返回检测到的编码格式。
  2. 遍历文件夹:指定文件夹路径后,代码会遍历该文件夹下所有 .jsonl 文件,调用 detect_encoding 函数来检测每个文件的编码。
  3. 结果去重:使用集合 encoding_results 存储编码类型,从而自动去重,最终输出唯一的编码类型。

运行代码

将代码保存为 detect_encoding_unique.py,然后运行脚本:

python detect_encoding_unique.py

在终端中,您将看到每个文件的编码类型,以及所有文件的唯一编码类型列表。这样我们可以快速了解文件夹中的 .jsonl 文件包含哪些编码格式,为后续的编码转换提供依据。

将非 UTF-8 编码的文件转换为 UTF-8

检测完编码之后,我们可以进一步将所有非 UTF-8 编码的文件转换为 UTF-8。以下是转换代码:

import os
import chardet

def convert_to_utf8(file_path):
    # 检测文件编码
    with open(file_path, 'rb') as f:
        raw_data = f.read()
        result = chardet.detect(raw_data)
        encoding = result['encoding']
    
    # 如果文件已经是 UTF-8 编码,跳过转换
    if encoding.lower() == 'utf-8':
        print(f"{file_path} 已经是 UTF-8 编码,无需转换。")
        return

    # 使用检测到的编码读取文件内容并转换为 UTF-8 编码
    with open(file_path, 'r', encoding=encoding) as f:
        content = f.read()
    
    # 将内容重新保存为 UTF-8 编码
    with open(file_path, 'w', encoding='utf-8') as f:
        f.write(content)
    
    print(f"{file_path} 已成功从 {encoding} 编码转换为 UTF-8 编码。")

# 指定文件夹路径
folder_path = "C:/path/to/your/jsonl_files"

# 遍历文件夹中的所有 .jsonl 文件
for filename in os.listdir(folder_path):
    if filename.endswith(".jsonl"):
        file_path = os.path.join(folder_path, filename)
        convert_to_utf8(file_path)

代码解析

  1. 编码检测:代码会检测文件的编码格式,如果是 UTF-8,则跳过该文件。
  2. 编码转换:对于非 UTF-8 文件,代码使用原编码读取文件内容,并重新保存为 UTF-8 编码。
  3. 遍历文件:代码遍历指定文件夹中的所有 .jsonl 文件,并对每个文件执行编码检测和转换。

运行代码

将代码保存为 convert_to_utf8.py,然后运行脚本:

python convert_to_utf8.py

在运行过程中,脚本会显示每个文件的编码转换状态。所有非 UTF-8 编码的文件都将被转换为 UTF-8,确保编码一致性。

总结

通过以上步骤,我们实现了以下功能:

  1. 编码检测:使用 chardet 库自动检测文件编码,并去重显示唯一编码类型。
  2. 编码转换:批量将非 UTF-8 编码的 .jsonl 文件转换为 UTF-8,确保文件编码一致性。

这两个脚本可以帮助开发者快速批量处理文件的编码问题,避免编码不一致导致的乱码或读取错误。在日常开发和数据处理中,确保文件编码一致性是非常重要的一步,特别是在处理来自不同系统或来源的数据文件时。

希望本文对您有所帮助!如果您有更复杂的需求或需要处理更多编码格式,chardet 仍然是一个值得推荐的工具。您也可以根据需要,将这些脚本拓展应用到其他文件类型和编码场景中。


猫头虎

粉丝福利区


👉 更多信息:有任何疑问或者需要进一步探讨的内容,欢迎点击文末名片获取更多信息。我是猫头虎博主,期待与您的交流! 🦉💬


联系我与版权声明 📩

  • 联系方式
    • 微信: Libin9iOak
    • 公众号: 猫头虎技术团队
  • 版权声明
    本文为原创文章,版权归作者所有。未经许可,禁止转载。更多内容请访问猫头虎的博客首页

点击✨⬇️下方名片⬇️✨,加入猫头虎AI共创社群矩阵。一起探索科技的未来,共同成长。🚀

猫头虎AI共创计划

🔗 猫头虎抱团AI共创社群 | 🔗 Go语言VIP专栏 | 🔗 GitHub 代码仓库 | 🔗 Go生态洞察专栏
✨ 猫头虎精品博文
;