处理JSON中OCR字段写入文件时保留内嵌换行符转义序列问题咨询
问题核心原因
pandas读取JSON文件时,会自动将字符串中存储的\n转义序列解析为实际的换行符,你直接将原始字符串写入文件时,这些实际换行就会被输出,导致单条记录被拆分多行。
修复思路
写入文件前将字符串中的实际换行符替换为字面量\n(即转义后的反斜杠加n),同时每条记录末尾追加一个实际换行符,保证每条记录单独占一行。另外优化文件操作逻辑,避免循环中反复打开文件降低效率,哈希尾号判断直接用字符匹配替代正则,简化代码。
修改后完整代码
import hashlib import pandas as pd file = "data/books_OCR.json" df_ocr = pd.read_json(file, encoding='utf-8') # 提前打开三个文件,避免循环中反复IO with open('gonito/train', 'w', encoding="utf-8") as f_train, \ open('gonito/dev-0', 'w', encoding="utf-8") as f_dev, \ open('gonito/test-A', 'w', encoding="utf-8") as f_test: for item in df_ocr['OCR']: # 计算md5哈希 md5_val = hashlib.md5(item.encode('utf-8')).hexdigest() last_char = md5_val[-1] # 替换实际换行符为字面量\n,保留转义形式 processed_str = item.replace('\n', r'\n') # 分配写入,每条末尾加实际换行保证单条占一行 if '0' <= last_char <= '4': f_train.write(f"{processed_str}\n") elif '5' <= last_char <= '7': f_dev.write(f"{processed_str}\n") else: f_test.write(f"{processed_str}\n")
补充说明
- 用
r'\n'表示原始字符串,避免Python对反斜杠做转义处理,确保写入的是字面量\n - 保持utf-8编码,完全兼容非ASCII特殊字符
- 输出文件无扩展名,符合约定要求
内容的提问来源于stack exchange,提问作者kamikadze366
相关产品推荐
相关产品推荐

