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

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

文章目录

  • 前言
  • 一、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

2.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

2.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
  }
}

相关文章:

  • 【机器学习】梯度下降法及使用一元二次方程模拟使用梯度下降法的代码实现
  • 45.matlab产生正弦叠加信号
  • 系统运维方案,系统运维的主要工作内容和运维检查单等资料,设备监控,设备运维检查(Word)
  • Redis 中有序集合(Sorted Set)的使用方法
  • java进阶学习IO流
  • 大厂都在用的前端换肤方案:多品牌适配 + 夜间模式全解析
  • Vue 3 零基础入门:从计数器应用开始你的工程化之旅 - 深入理解 Vue 3 响应式系统
  • 详解 torch.triu:上三角矩阵的高效构造(中英双语)
  • Linux 之 Centos 安装Consul
  • maven Problem shading JAR的几个解决方案
  • java进阶学习脑图
  • deepseek_v3_base和deepseek_r1_zero和deepseek_r1
  • 【深入浅出:Core-JS Legacy 的降级兼容指南】
  • Filter-入门
  • uni-app 登录成功后自动跳转至登录前页面(H5\微信小程序)
  • 实战篇-java8中的垃圾回收器
  • python绑定udp时使用127.0.0.1作为ip,无法sendto,报错Invalid argument
  • Android 键盘输入按确认或换行 直接触发提交
  • 了解 PoE 扩展模式(Extend Mode)及其对数据速率的影响
  • python爬虫系列课程4:一个例子学会使用xpath语法
  • 餐饮团购网站建设/广州百度seo
  • 做网站哪种域名好记/竞价软件哪个好
  • dw做网站的流程/广州疫情今天最新消息
  • 网站如何被收录/日本疫情最新数据
  • 3dmax建模/夫唯seo教程
  • 网站建设宣传视频/百度认证考试