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

Python读取制表符分隔文本到两变量时触发TypeError报错

问题定位

你遇到的报错和%格式化语法弃用完全无关,核心是两个错误:

  1. 路径字符串没有留占位符:你写的路径值是'old data/eng-sin.txt',字符串里既没有%s这类旧版格式化标记,也没有{}这类新版格式化占位符,却额外传入了lang1、lang2两个参数,解释器找不到参数的插入位置,直接抛出格式化错误。就算你换成.format()写法,只要路径里没加占位符,一样会报参数不匹配的错。
  2. 源文件存在脏数据:你贴的对照文本里有两行(according to the anuwa、on a matha)只有单语言内容,没有对应的制表符和第二列翻译,后续直接按两列拆分会触发索引越界错误。
修复代码

1. 修正文件读取逻辑

如果你的文件名是固定的eng-sin.txt,完全不需要做字符串格式化,直接写路径即可,推荐用上下文管理器自动管理文件资源,避免文件句柄泄漏:

# 直接读取固定路径文件
with open('old data/eng-sin.txt', encoding='utf-8') as f:
    lines = f.read().strip().split('\n')

如果你原本的需求是根据lang1、lang2变量动态拼接文件名(比如不同语言对对应不同文件名),那必须在路径字符串里加上对应占位符再传参:

lang1 = "eng"
lang2 = "sin"
# 路径里预留两个占位符,对应传入的语言参数
file_path = "old data/{}-{}.txt".format(lang1, lang2)
with open(file_path, encoding='utf-8') as f:
    lines = f.read().strip().split('\n')

2. 拆分双语内容到对应变量

因为源文件是制表符分隔,且存在缺列的无效行,拆分时要做合法性校验,过滤脏数据:

source_texts = []
target_texts = []

for line in lines:
    # 按制表符拆分,最多拆成2段,避免文本本身含制表符导致拆分异常
    columns = line.split('\t', maxsplit=1)
    # 仅保留同时存在两列、且内容非空的有效行
    if len(columns) == 2:
        src, tgt = columns[0].strip(), columns[1].strip()
        if src and tgt:
            source_texts.append(src)
            target_texts.append(tgt)

运行后source_texts存储所有第一列的英文内容,target_texts存储对应位置的第二列翻译内容,缺列的无效行会被自动过滤。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 13:01:21