You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python将JSON转CSV:特殊文本处理与单元格格式优化问题

问题描述

我是第一次在这里提问,若信息不足、术语有误或格式不当,敬请谅解。我正在用Python将包含氢、氦等4种元素的JSON文件转换成CSV文件,JSON里部分字段值是NotApplicable、Unknown或者TeX格式字符(比如\text{u})。现有转换代码处理后,CSV里出现了异常内容,我尝试修改判断逻辑来处理这些特殊值,但没生效,请求解决如何清理这些特殊文本、优化单元格格式的问题。

解决方案

1. 批量清理特殊字段值

把NotApplicable、Unknown这类无意义值统一替换为CSV友好的内容(比如空字符串或N/A),注意覆盖大小写、前后空格的情况:

  • 遍历JSON每个元素的所有字段,逐个检查值
  • 转成小写后判断,避免因大小写差异漏处理

2. 移除TeX格式标记

针对\text{u}这类TeX语法,用正则表达式提取有效内容或直接替换:

  • 匹配\text{xxx}结构,提取括号内的文本
  • 若不需要保留上标下标等格式,直接移除^、_这类符号

3. 优化CSV输出格式

用csv.DictWriter自动处理单元格的引号包裹,避免逗号、引号导致的格式混乱,同时指定UTF-8编码防止乱码。

修改后的完整代码

import json
import csv
import re

# 清理TeX格式字符
def clean_tex(text):
    if not isinstance(text, str):
        return text
    # 替换\text{xxx}为xxx
    tex_pattern = re.compile(r'\\text\{([^}]+)\}')
    cleaned = tex_pattern.sub(r'\1', text)
    # 移除上标下标标记
    cleaned = cleaned.replace('^', '').replace('_', '')
    return cleaned

# 处理特殊值
def clean_special_values(value):
    if isinstance(value, str):
        stripped_val = value.strip().lower()
        if stripped_val in ['notapplicable', 'unknown']:
            return ''  # 可替换为"N/A"
        return clean_tex(value)
    return value

def json_to_csv(json_data, output_path):
    if not json_data:
        return
    # 获取所有字段名
    fieldnames = json_data[0].keys()
    with open(output_path, 'w', newline='', encoding='utf-8') as f:
        writer = csv.DictWriter(f, fieldnames=fieldnames)
        writer.writeheader()
        # 逐个清理并写入元素
        for elem in json_data:
            cleaned_elem = {k: clean_special_values(v) for k, v in elem.items()}
            writer.writerow(cleaned_elem)

# 加载JSON并转换
with open('elements.json', 'r', encoding='utf-8') as f:
    elem_data = json.load(f)

json_to_csv(elem_data, 'elements_cleaned.csv')

常见问题排查

如果之前修改判断逻辑没生效,大概率是这几个原因:

  • 只处理了部分字段,没有遍历所有键值对
  • 判断时没处理字符串的大小写或前后空格
  • TeX字符的替换逻辑没覆盖到所有出现的格式

内容的提问来源于stack exchange,提问作者Abdullah James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:45:54