如何在保存JSON Lines文件时保留双引号转义符?
解决JSONL文件读取与保存时保留转义符的问题
问题原因
pandas读取JSONL时,会自动解析JSON语法中的转义符(比如\"),将其转换为字符串实际包含的双引号,所以DataFrame中存储的text字段值是II. Firtos. Jelige: "Vándor daruid V betűje szállt.",而非带有转义符的版本。你之前手动拼接JSON字符串的方式,没有对字符串中的双引号重新转义,导致输出的JSONL缺少必要的转义符。
解决方案
不要手动拼接JSON字符串,改用Python标准库的json.dumps()方法序列化每一条记录,它会自动处理字符串中需要转义的字符(比如双引号),保证输出的JSONL格式完全符合要求。
修改后的代码
import json import os from tqdm import tqdm from PIL import Image import pandas as pd def load_jsonl1(): return pd.read_json( path_or_buf='input.jsonl', lines=True, ) df1 = load_jsonl1() output_path = 'output.jsonl' path = '你的图片目录路径' # 替换为实际路径 aug_imgs = '你的增强图片保存目录' # 替换为实际路径 sample_amount = 5 # 替换为实际的增强样本数 # 写入output.jsonl文件 with open(output_path, 'w', encoding='utf-8') as outfile: for idx in tqdm(range(len(df1))): image_path = os.path.join(path, df1['file_name'][idx]) image = Image.open(image_path).convert("RGB") for i in range(sample_amount): augmented_image = augment_img(image) augmented_image_path = os.path.join(aug_imgs, f'aug_{idx * sample_amount + i}.jpg') augmented_image.save(augmented_image_path) # 构造记录字典,用json.dumps序列化 record = { 'file_name': os.path.basename(augmented_image_path), 'text': df1['text'][idx] } # 序列化后写入,自动处理转义 outfile.write(json.dumps(record, ensure_ascii=False) + '\n')
关键说明
json.dumps()的作用:它会将Python字典转换为符合JSON规范的字符串,自动对字符串中的双引号添加转义符\,同时保留特殊字符(比如匈牙利语中的带重音字符)。ensure_ascii=False参数:确保输出的JSON字符串保留非ASCII字符(如á、ű),不会被转义为Unicode编码。- 修正变量名:原代码中误用了
df,替换为实际的DataFrame变量df1。
内容的提问来源于stack exchange,提问作者Mohammed
相关产品推荐
相关产品推荐

