使用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
相关产品推荐
相关产品推荐

