Python读取制表符分隔文本到两变量时触发TypeError报错
问题定位
你遇到的报错和%格式化语法弃用完全无关,核心是两个错误:
- 路径字符串没有留占位符:你写的路径值是
'old data/eng-sin.txt',字符串里既没有%s这类旧版格式化标记,也没有{}这类新版格式化占位符,却额外传入了lang1、lang2两个参数,解释器找不到参数的插入位置,直接抛出格式化错误。就算你换成.format()写法,只要路径里没加占位符,一样会报参数不匹配的错。 - 源文件存在脏数据:你贴的对照文本里有两行(
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
相关产品推荐
相关产品推荐

