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

处理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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:15:03