当前位置: 首页 > article >正文

Python--数据格式转换

在 Python 中,数据格式转换是非常常见的任务。我们可以使用内置的模块如 json 或者 pandas 来进行格式转换。你提到的 .jsonl 文件(JSON Lines)是每一行都是一个 JSON 对象的文件格式,而 .json 是标准的 JSON 文件格式。

任务目标

我们要从 .jsonl 文件中读取数据,并将其转换为标准的 .json 格式(通常是将多个 JSON 对象合并到一个列表中)。

数据格式说明

  • JSONL 格式:每一行是一个单独的 JSON 对象,例如:

    {"name": "John", "age": 30}
    {"name": "Jane", "age": 25}
    
  • 目标 JSON 格式:将所有这些 JSON 对象组合成一个列表,例如:

    [
      {"name": "John", "age": 30},
      {"name": "Jane", "age": 25}
    ]
    

示例代码

import json

# 定义输入和输出文件路径
input_file = 'data.jsonl'  # 假设的.jsonl文件名
output_file = 'output.json'  # 要转换为的.json文件名

# 读取 .jsonl 文件并将其转换为标准的 .json 格式
def jsonl_to_json(input_file, output_file):
    data_list = []
    
    # 逐行读取 .jsonl 文件
    with open(input_file, 'r', encoding='utf-8') as infile:
        for line in infile:
            try:
                # 将每行JSON对象解析为Python字典,并追加到列表中
                data_list.append(json.loads(line.strip()))
            except json.JSONDecodeError as e:
                # 如果遇到解码错误,则打印警告信息
                print(f"Error decoding JSON: {e}")
    
    # 将整个列表写入到标准的 .json 文件
    with open(output_file, 'w', encoding='utf-8') as outfile:
        json.dump(data_list, outfile, indent=4, ensure_ascii=False)
    
    print(f"Conversion complete! Output saved to {output_file}")

# 调用转换函数
jsonl_to_json(input_file, output_file)

代码说明

  1. 读取 .jsonl 文件:逐行读取 .jsonl 文件中的每一个 JSON 对象,使用 json.loads 将其解析为 Python 的字典对象,并将其添加到一个列表中。

  2. 处理解码错误:在解析过程中,可能遇到一些不合法的 JSON 数据,try-except 块用来捕获并处理 JSONDecodeError 错误。

  3. 写入 .json 文件:使用 json.dump 将最终的列表对象写入到 .json 文件中,并设置 indent=4 来让输出更具可读性,ensure_ascii=False 确保非 ASCII 字符能够正确显示(如果有中文字符等)。

输出示例

如果 data.jsonl 文件内容为:

{"name": "John", "age": 30}
{"name": "Jane", "age": 25}

转换后的 output.json 文件内容将是:

[
    {
        "name": "John",
        "age": 30
    },
    {
        "name": "Jane",
        "age": 25
    }
]

注意事项

  1. 如果 .jsonl 文件中存在不合法的 JSON 行,代码会跳过这些行并打印错误信息。
  2. 如果文件较大,可能需要使用生成器来逐行处理,避免将所有数据一次性加载到内存中。

这样可以将 .jsonl 格式的数据转换为标准的 .json 文件格式。


http://www.kler.cn/news/309498.html

相关文章:

  • 在react中 使用redux
  • ubuntu安装wordpress(基于LNMP环境)
  • GBase8c主备版500升级步骤
  • 演示:基于WPF自绘的中国省份、城市、区县矢量地图
  • android 识别设备是否为模拟器
  • MySQL 按照条件(分组)只取一个形成列表 group max
  • PostgresML:通过 PostgreSQL 集成简化 AI 模型部署
  • git reset 几点疑问
  • 50ETF期权可以当天买卖吗?
  • 2024年10月蓝桥杯青少组的Stema考试开始报名
  • React两种路由模式的实现原理
  • 高防IP是如何防御攻击
  • 苹果电脑也可以清除垃圾吗?苹果电脑清理垃圾用什么软件哪个好?
  • 运用Java实现倒计时功能
  • 工业智能网关未来工业智能化的核心枢纽-天拓四方
  • 战神诸神黄昏9月19日登录PC端! 手机怎么玩战神诸神黄昏
  • 记录开发一个英语听力训练网站
  • 中断和异常处理
  • 【信息论基础第二讲】离散信源的数学模型及其信息测度包括信源的分类、信源的数学模型、离散信源的信息测度、二元信源的条件熵联合熵
  • 相亲交友小程序:轻松找到你的另一半
  • postgresql|数据库|pg_repack和idle_in_transaction_session_timeout参数的关系
  • rabbitmq备份还原
  • Qt QSerialPort串口编程
  • CommaSeparatedListOutputParser
  • Haption力反馈设备在机器人遥操作中的应用优势
  • TCP并发服务器的实现
  • 某思CMS V10存在SQL注入漏洞
  • 深入理解Linux中的多路复用技术:select、poll与epoll
  • 基于图卷积网络的轻量化推荐模型(论文复现)
  • 【Docker】docker的一些常用命令