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

为何CSV文件转二维数组正常,TXT文件转二维数组却触发列表越界错误?

为什么读取TXT转二维数组会报索引越界,而CSV代码正常?

先看两段代码的表现:

报错的TXT读取代码

def read_text_file(filename):
    with open(filename, 'r') as file:
        array = [line.split() for line in file]
    return array

array = read_text_file("file.txt")
print(array[0][1])

这段代码运行时会抛出list index out of range错误。

正常运行的CSV读取代码

import csv

with open('file.csv', 'r') as file:
    reader = csv.reader(file)
    data = list(reader)

print(data[0][1])

两者的核心差异在于数据分割的逻辑和格式处理规则,具体分三点:

1. 分割规则的严格性不同

  • TXT代码用line.split():默认按任意空白字符(空格、制表符、换行符等)分割,还会自动忽略行首/行尾的空白。如果file.txt第一行只有1个元素(比如abc),或是空行,那么array[0]就是长度为1的列表['abc'],甚至是空列表[],这时访问索引1必然越界。
  • CSV的csv.reader:严格遵循CSV格式标准,默认用逗号作为分隔符,哪怕字段是空值(比如第一行是a,,b),也会保留空字符串的位置,生成['a', '', 'b']这样的列表,确保每行的子列表长度和列数匹配,不会出现索引突然缺失的情况。

2. 空行的处理方式不同

  • TXT代码遇到空行时,line.split()会返回空列表[],如果file.txt的第一行是空行,array[0]就是空列表,访问[1]直接触发索引越界。
  • csv.reader遇到空行时,会生成一个包含空字符串的列表[''],不会出现空列表,所以data[0]至少有一个元素,只要CSV文件的第一行确实有两个及以上字段,访问[1]就不会报错。

3. 复杂字段的兼容性不同

如果数据里有带空格的字段(比如"hello world",123),TXT代码的split()会把它拆成['"hello', 'world"', '123'],破坏字段完整性;而csv.reader会正确识别引号包裹的字段,生成['hello world', '123'],保证每个字段的位置和内容正确,自然不会出现索引错位的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:50:19