大家好我是 SiKi老师。对白表里的台词可能包含逗号、双引号甚至换行。如果工具用split(,)拆一条 CSV 文本台词中的逗号会不会也被拆走本文用自拟的两列对白数据检查这个问题不读取真实游戏资源也没有使用第三方剧情素材。本地实测环境是 Windows、Python 3.12.14。所有输入均为内存字符串CSV 解析使用 Python 标准库没有验证 Unity、Godot 的导入流程、编码识别或实际游戏显示。本文关注“字段边界怎样读对”不重复讨论完整的表头和业务内容校验。一 先复现台词被拆成两段最小示例中说话者是guide台词是Go, now。CSV 用双引号包住包含逗号的字段rawspeaker,line\nguide,Go, now\nprint(raw.splitlines()[1].split(,))本地输出为[guide, Go, now]原本两列被拆成了三段外层引号还留在结果里。split只是按给定字符串分隔不会解释 CSV 中引号保护字段的规则。把多出来的片段再用逗号拼回去也不是通用修复办法因为一行可能含有多个带引号的字段不能靠“剩下的都当台词”解决所有输入。如果数据协议明确不允许台词含逗号应当把违反协议的数据报告出来如果协议允许就需要按约定的 CSV 格式解析。不要为了让错误的拆分代码通过悄悄删除作者台词里的标点。二 用CSV解析器识别字段边界对同一份输入使用标准库importcsvimportio rawspeaker,line\nguide,Go, now\nrowslist(csv.reader(io.StringIO(raw,newline)))print(rows[0])print(rows[1])输出是[speaker, line] [guide, Go, now]默认格式使用逗号分隔、双引号作为引用字符台词里的逗号被保留为字段内容。解析后的结果仍是字符串列表reader不会自动判断角色是否存在、台词是否为空或表格是否含有全部必需字段。这里用StringIO保持示例独立。实际读取文本文件时Python 官方文档建议以newline打开 CSV 文件避免换行处理干扰包含换行的引用字段文件编码仍需按输入协议指定。本文没有实际读取未知编码文件不能据此承诺任何 CSV 都能直接导入。三 台词换行时一条记录可能跨多行再把台词改成两行rawspeaker,line\nguide,first\nsecond\nreadercsv.reader(io.StringIO(raw,newline))rowslist(reader)print(rows[1])print(len(raw.splitlines()),len(rows),reader.line_num)本地结果为[guide, first\nsecond] 3 2 3源文本有三行解析后只有两条记录其中一条是表头。reader.line_num记录读过的源文本行数不能直接当作解析记录数也不能把两条记录都算成两句游戏台词。如果先splitlines()再逐行独立解析这句跨行台词的完整引用字段就会被切断。对这类输入应把完整文本流交给同一个解析器日志里也要区分源文本行号、数据记录序号和游戏对白 ID避免让协作者按错误的行号定位内容。四 双引号与分隔符要遵循同一协议台词本身带双引号时本例按默认格式将其写成两个连续双引号rawguide,Say yes\nprint(next(csv.reader(io.StringIO(raw,newline))))结果是[guide, Say yes]。这些引号的含义来自 CSV 格式规则不能先把所有引号全局删掉否则台词内容会被改写。有些工具约定用分号分隔。独立实测中guide;Go, now配合delimiter;才得到两列把分号数据当成默认逗号格式读取不能得到预期的字段边界。我会优先读取双方明确约定的格式不凭文件扩展名猜分隔符也不把自动探测说成一定正确。五 解析成功后还要做内容验收本地另测了guide,解析后第二个字段是空字符串它不会自动变成缺失键或None。另外输入guide,unfinished且未闭合引用时使用csv.reader(..., strictTrue)遍历会抛出csv.Error默认的strict为假本文没有把默认解析器说成一定拒绝所有坏格式。严格模式也不是完整对白校验器。语法可解析之后仍需按项目规则检查列数、表头、对白 ID、必填内容、允许的长度与版本对应关系再决定是否生成资源文件。不要在解析失败后拿上一次的结果冒充本次成功也不要把空台词自动替换为随意生成的句子。排查时可以先复制一条脱敏且保留原始引号的记录在临时字符串上复现记录分隔符、引用规则、源行数和解析结果。本文全部测试都没有写入游戏工程看到正确的两列输出只说明这组示例的字段边界被读对不代表引擎内呈现或音频匹配已验收。依据Python 3.12 官方 csv 文档包括格式参数、换行要求、strict与line_num的含义。
阅读完成 · 觉得有帮助?