Python处理TXT文件触发IndexError: string index out of range问题排查
解决你的Python自动标注脚本IndexError问题
嘿,我一眼就揪出问题啦!你碰到的IndexError: string index out of range完全是因为一个逻辑小失误,咱们来拆解清楚:
错误根源
你本来想检查上一行是否为空,结果代码里写了z = i[position-1]——这里的i是当前遍历到的行字符串,position-1是上一行的索引,你这相当于去取当前行字符串的第position-1个字符!比如当position是5的时候,你要取当前行的第4个字符,要是当前行是空字符串或者长度不足5,直接就触发索引越界了。而且这根本不是你要的逻辑,你应该从原行列表y里取上一行的内容,不是当前行的某个字符!
修正后的完整代码
我还帮你优化了几个细节(比如用with语句安全管理文件,避免漏加正常行):
def add_paragraph_tags(file_path): final_list = [] # 用with语句自动关闭文件,比直接open更安全可靠 with open(file_path, 'r', encoding='utf8', errors='ignore') as file: file_content = file.read() lines = file_content.split("\n") for idx, current_line in enumerate(lines): if idx == 0: final_list.append(current_line) else: # 正确获取上一行内容:从原列表lines里取索引为idx-1的元素 previous_line = lines[idx-1] # 用strip()判断更严谨,能识别全是空格/制表符的空行 if previous_line.strip() == '': final_list.append(f"<p>{current_line}") else: # 别忘了上一行非空时,也要把当前行加入列表,不然会丢内容! final_list.append(current_line) return final_list
额外优化说明
- 原来的代码只处理了上一行是空的情况,漏掉了上一行非空的行,导致最终列表缺失内容,现在补充了else分支;
- 用
strip()判断空行比直接== ''更实用,能过滤掉那些看起来是空但实际有空格/制表符的行; - 用f-string拼接字符串比
"<p>"+current_line更简洁易读。
你可以拿一段测试文本试试,比如:
开头行 新段落第一行 同段落第二行 又一个段落
运行后会得到符合预期的结果:
['开头行', '', '<p>新段落第一行', '同段落第二行', '', '<p>又一个段落']
内容的提问来源于stack exchange,提问作者Mattia Spadoni
相关产品推荐
相关产品推荐

