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

自定义文件转JSON遇问题:代码执行后文件内容丢失求助

自定义格式转JSON的问题与解决方案

问题背景

我需要将一种自定义格式的文件转换为JSON格式以便编辑,自定义格式示例如下:

{
    "#letter_a" "A"
    "#letter_b" "B"
    "#letter_c" "C"
    "#letter_d" "D"
    "#letter_e" "E"
    "#letter_f" "F"
    "#letter_g" "G"
    "#letter_h" "H"
    "#letter_i" "I"
    "#letter_j" "J"
    "#letter_k" "K"
    "#letter_l" "L"
    "#letter_m" "M"
}

目标是给每个键末尾添加冒号,行末添加逗号(最后一行除外),我尝试了以下代码:

import in_place

with in_place.InPlace('english_m.lang', encoding="utf-8", backup='.bak') as file:
    for line in file:
        cumle = line.join(line.split('"', 2)[:2])
        print(line.replace(cumle, cumle+'":'), end='')

但执行后文件内容全部丢失,请问如何解决该问题,或是否有直接转JSON的方法?

问题原因

你用print()输出到了控制台,而非写入in_place库的文件对象中。in_place.InPlace会先清空原文件,等待写入修改后的内容,由于没有向文件写入任何内容,最终文件被清空。

解决方案

方案一:修复原代码,正确使用in_place库

修改代码,将内容写入文件对象而非控制台:

import in_place

with in_place.InPlace('english_m.lang', encoding="utf-8", backup='.bak') as file:
    lines = list(file)
    total_lines = len(lines)
    for idx, line in enumerate(lines):
        stripped_line = line.strip()
        # 跳过首尾大括号行
        if stripped_line in ('{', '}'):
            file.write(line)
            continue
        # 处理键值行:在键后加冒号,行末加逗号(最后一个键值对除外)
        parts = line.split('"', 2)
        if len(parts) >= 3:
            modified_line = f'{parts[0]}"{parts[1]}": {parts[2].rstrip()}'
            # 倒数第二行是最后一个键值对,后面是闭合大括号,不加逗号
            if idx != total_lines - 2:
                modified_line += ','
            modified_line += '\n'
            file.write(modified_line)

方案二:直接解析为JSON结构再写入(更稳妥)

先读取文件解析成Python字典,再直接转为标准JSON写入,避免手动处理格式细节:

import json

def parse_custom_format(file_path):
    data = {}
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            stripped = line.strip()
            if stripped in ('{', '}'):
                continue
            # 分割键和值
            key_part, value_part = stripped.split('" "')
            key = key_part.strip('"')
            value = value_part.strip('"')
            data[key] = value
    return data

# 解析自定义格式文件
lang_data = parse_custom_format('english_m.lang')

# 写入标准JSON文件
with open('english_m.json', 'w', encoding='utf-8') as f:
    json.dump(lang_data, f, indent=4, ensure_ascii=False)

执行后生成的JSON文件内容如下:

{
    "#letter_a": "A",
    "#letter_b": "B",
    "#letter_c": "C",
    "#letter_d": "D",
    "#letter_e": "E",
    "#letter_f": "F",
    "#letter_g": "G",
    "#letter_h": "H",
    "#letter_i": "I",
    "#letter_j": "J",
    "#letter_k": "K",
    "#letter_l": "L",
    "#letter_m": "M"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:35:19