Python读取DataFrame导出的txt文件报list index out of range错误如何解决
报错原因与解决方案
报错IndexError: list index out of range出现在account_no = words[0]执行时,本质是words为空列表,不存在下标为0的元素。仅读取该文件时报错,说明问题出在该txt的内容结构和你的读取逻辑不匹配,常见原因及修复方案如下:
核心原因
- 导出的txt文件存在空行
你通过to_csv导出文件时,如果no_duplicate_accountsDF包含全为空值的行,或是导出操作自动在文件末尾追加了空行,逐行读取时遇到空行调用split()方法会得到空列表,此时访问[0]就会触发报错。你可以手动打开该txt文件,检查是否存在中间空行或末尾空行。 - 分割逻辑和导出规则不匹配
你导出时指定的分隔符为制表符\t,如果读取时调用split()没有指定分隔符,会默认按任意空白字符分割,若行内只有制表符无有效内容,也会得到空列表。 - 编码不匹配
读取文件时未指定和导出时一致的编码,可能导致部分行内容解析失败变为空白,分割后得到空列表。
修复方案
读取侧修复(推荐,兼容性更强)
读取时增加空行校验、指定分隔符、增加列表长度判断,避免报错:
filename = 'no_duplicate_accounts.txt' # 建议和导出时使用相同编码,例如utf-8 with open(filename, 'r', encoding='utf-8') as fhand: for line in fhand: # 去除行首尾的空白字符 line = line.strip() # 跳过空行 if not line: continue # 指定和导出时一致的制表符作为分隔符 words = line.split('\t') # 校验列表长度,避免元素不足 if len(words) < 1: continue account_no = words[0] # 后续业务逻辑
导出侧修复
导出前清理DataFrame的空行,统一指定编码,从根源避免生成空行:
# 删除全为空值的行 no_duplicate_accountsDF = no_duplicate_accountsDF.dropna(how='all') no_duplicate_accountsDF.to_csv('no_duplicate_accounts.txt', header = False, index = False, sep = '\t', encoding='utf-8')
内容的提问来源于stack exchange,提问作者Mark Jantze
相关产品推荐
相关产品推荐

