【python随手记】——读取文本文件内容转换为json格式

news/2025/2/26 11:25:34

文章目录

  • 前言
  • 一、TXT文件转换为JSON数组
    • 1.txt文件内容
    • 2.python代码
    • 3.输出结果
  • 二、TXT文件转换为JSON对象
    • 1.txt文件
    • 2.python代码
    • 3.输出结果


前言

场景:用于读取包含空格分隔数据的TXT文件,并将其转换为结构化JSON文件


一、TXT文件转换为JSON数组

1.txt文件内容

地点A 116.405285 39.904989 43.5
地标B 121.473701 31.230416 4.2
观测点C 113.264385 23.129112 12.8

python_24">2.python代码

python"># -*- coding:utf-8 -*-
# @Time: 2025-02-25 20:25
# @Author: 番茄君
# @File:06-txt转换JSON数组.py
# @Software: PyCharm


import json


def txt_to_json(input_file, output_file):
    """
    将TXT文件转换为JSON格式
    :param input_file: 输入文件路径(如input.txt)
    :param output_file: 输出文件路径(如output.json)
    """
    # 定义一个列表
    data_list = []

    # 读取文件并逐行处理
    with open(input_file, 'r', encoding='utf-8') as f:
        for line in f:
            # 去除首尾空白字符并按空格分割
            parts = line.strip().split(" ")

            # 验证数据格式(需包含至少4列)
            if len(parts) >= 4:
                attribute = parts[0]
                try:
                    # 提取经度、纬度、高度并转换为浮点数
                    longitude = float(parts[1])
                    latitude = float(parts[2])
                    height = float(parts[3])

                    # 构建JSON对象
                    data = {
                        "属性名": attribute,
                        "经度": longitude,
                        "纬度": latitude,
                        "高度": height
                    }
                    data_list.append(data)
                except ValueError:
                    print(f"数据格式错误,跳过行:{line}")

    # 生成JSON文件
    with open(output_file, 'w', encoding='utf-8') as json_f:
        json.dump(data_list, json_f, ensure_ascii=False, indent=4)

3.输出结果

[
    {
        "属性名": "地点A",
        "经度": 116.405285,
        "纬度": 39.904989,
        "高度": 43.5
    },
    {
        "属性名": "地标B",
        "经度": 121.473701,
        "纬度": 31.230416,
        "高度": 4.2
    },
    {
        "属性名": "观测点C",
        "经度": 113.264385,
        "纬度": 23.129112,
        "高度": 12.8
    }
]

二、TXT文件转换为JSON对象

1.txt文件

地点A 116.405285 39.904989 43.5
地标B 121.473701 31.230416 4.2
观测点C 113.264385 23.129112 12.8

python_108">2.python代码

python"># -*- coding:utf-8 -*-
# @Time: 2025-02-25 16:15
# @Author: 番茄君
# @File:05-txt转换为json对象.py
# @Software: PyCharm

import json


def txt_to_json(input_file, output_file):
    """
    将TXT文件转换为嵌套JSON格式
    :param input_file: 输入文件路径(如input.txt)
    :param output_file: 输出文件路径(如output.json)
    """
    # 定义一个字典
    result = {}

    with open(input_file, 'r', encoding='utf-8') as f:
        for line_num, line in enumerate(f, 1):
            # 清理数据并分割列
            cleaned_line = line.strip()
            # print(line_num,line,cleaned_line)
            if not cleaned_line:
                continue  # 跳过空行

            columns = cleaned_line.split()

            # 验证数据格式
            if len(columns) != 4:
                print(f"第{line_num}行格式错误,需要4列数据,实际列数:{len(columns)}")
                continue

            key = columns[0]
            try:
                # 提取并转换坐标数据
                coordinates = {
                    "经度": float(columns[1]),
                    "维度": float(columns[2]),
                    "高度": float(columns[3])
                }
            except ValueError as e:
                print(f"第{line_num}行数值格式错误:{e}")
                continue

            # 检查重复键
            if key in result:
                print(f"警告:键名'{key}'重复(第{line_num}行)")

            result[key] = coordinates

    # 生成JSON文件
    with open(output_file, 'w', encoding='utf-8') as json_file:
        json.dump(result, json_file, ensure_ascii=False, indent=2)


# 使用示例
txt_to_json('input.txt', 'output.json')

3.输出结果

{
  "地点A": {
    "经度": 116.405285,
    "维度": 39.904989,
    "高度": 43.5
  },
  "地标B": {
    "经度": 121.473701,
    "维度": 31.230416,
    "高度": 4.2
  },
  "观测点C": {
    "经度": 113.264385,
    "维度": 23.129112,
    "高度": 12.8
  }
}


http://www.niftyadmin.cn/n/5868624.html

相关文章

【deepseek】本地部署+webui访问

背景 最近deepseek很火,但是官网的老是被限流使用,还有就是自己也想着玩一玩,于是准备在自己电脑跑一个 直接附上结果地址mydeepseek 准备工作 windows和linux都可 我这里选择linux,ubuntu系统 安装ollama 看下图&#xff0…

uniapp通过概率实现一个随机抽奖

在很多电商平台或者活动中,都会有类似“抽奖赢优惠券”的功能。这个功能通常要求用户通过某些随机算法来决定是否中奖以及获得的优惠券内容。实现这一功能时,如何正确地处理中奖概率、抽取优惠券并返回抽奖结果是一个常见的问题。 本文将介绍如何通过一…

【初阶数据结构】树和二叉树

目录 前言树的概念与结构树的概念树的相关概念树的表示 二叉树的概念及结构二叉树的概念几种特殊的二叉树1.满二叉树2.完全二叉树 二叉树的性质二叉树的存储结构1、顺序存储2、链式存储 前言 前面我们学习了顺序表,单链表,栈和队列,它们在逻…

kotlin 知识点 七 泛型的高级特性

对泛型进行实化 泛型实化这个功能对于绝大多数Java 程序员来讲是非常陌生的,因为Java 中完全没有这个概 念。而如果我们想要深刻地理解泛型实化,就要先解释一下Java 的泛型擦除机制才行。 在JDK 1.5之前,Java 是没有泛型功能的,…

C语言学习笔记-初阶(13)scanf介绍

当我们有了变量&#xff0c;我们需要给变量输入值就可以使用 scanf 函数&#xff0c;如果需要将变量的值输出在屏幕上的时候可以使用 printf 函数&#xff0c;下面看⼀个例子&#xff1a; #include <stdio.h> int main() {int score 0;printf("请输⼊成绩:")…

探索超声波的奥秘——定时器与PCA

超声波技术的诞生灵感来源于大自然中的回声定位现象&#xff0c;尤其是蝙蝠的独特能力。蝙蝠通过发出高频超声波并捕捉回声来精确地探测周围的物体和猎物&#xff0c;即使在漆黑的夜晚也能轻松导航。 在单片机中&#xff0c;也有着超声波这个模块&#xff0c;它在单片机上的标识…

[实现Rpc] 客户端 | Requestor | RpcCaller的设计实现

目录 Requestor类的实现 框架 完善 onResponse处理回复 完整代码 RpcCaller类的实现 1. 同步调用 call 2. 异步调用 call 3. 回调调用 call Requestor类的实现 &#xff08;1&#xff09;主要功能&#xff1a; 客户端发送请求的功能&#xff0c;进行请求描述对服务器…

IDEA关闭SpringBoot程序后仍然占用端口的排查与解决

IDEA关闭SpringBoot程序后仍然占用端口的排查与解决 问题描述 在使用 IntelliJ IDEA 开发 Spring Boot 应用时&#xff0c;有时即使关闭了应用&#xff0c;程序仍然占用端口&#xff08;例如&#xff1a;4001 端口&#xff09;。这会导致重新启动应用时出现端口被占用的错误&a…