尝试访问列表元素时出现索引错误

时间:2018-05-15 22:03:03

标签: python csv indexing

所以我有一个csv风格的文本文档,如下所示:

Line number,1  
1,K1,O1,L1,L2,L3  
2,K2,O2,L2,L3  
3,K3,O3,L1,L3  
4,K4,O4,L2

我想检查第一行中“行号”之后的数字是否等于以下行之一中的第一个元素。在这种情况下,这个数字可以是1,2,3或4.

我的代码如下:

import csv

lineNumber = 0

with open('B.txt', 'r') as f:

    reader = csv.reader(f, delimiter=",")

    for row in reader:
        if "Line Number" in row[0]:
            lineNumber = int(row[1]) <- not sure about this syntax btw
            print("Is equal")
            break

我最终得到了这个错误:

if "Line Number" in row[0]:
IndexError: list index out of range

有行[n]的所有内容似乎都会出错。

3 个答案:

答案 0 :(得分:3)

您的代码有两项改进:

  1. 比较相同类型的对象,例如intint
  2. 使用next(reader)提取for循环前的第一行。
  3. 这是你可以重构逻辑的一种方式:

    import csv
    
    with open('B.txt', 'r') as f:
    
        reader = csv.reader(f, delimiter=",")
    
        headers = next(reader)
        lineNumber = int(headers[1])
    
        for row in reader:
            if int(row[0]) == lineNumber:
                print("Is equal")
                break
    

答案 1 :(得分:1)

import csv
lineNumber = 0
with open('test', 'r') as f:
    reader = csv.reader(f, delimiter=",")
    for row in reader:
        if row[0] == 'Line number':
            lineNumber = row[1]
        else:
            if row[0] == lineNumber:
            print 'isEqual for row ',row

答案 2 :(得分:0)

您的示例csv文件列表'Line number,1' - 您测试'Line Number' - 查看 n umber 名词棕土

minimal verifyable complete example创建文件并实现逻辑:

import csv

t= """Line number,1
1,K1,O1,L1,L2,L3
2,K2,O2,L2,L3
3,K3,O3,L1,L3
4,K4,O4,L2
"""

# create file
fn = "B.txt"
with open(fn,"w") as f:
    f.write(t)

# parse file 
lineNumber = 0
with open(fn, 'r') as f:
    reader = csv.reader(f, delimiter=",")
    for row in reader: 
        if "Line number" in row[0]:  # fixed capitalization
            lineNumber = row[1]      # no need to make it an int, str compare is fine 
        elif row[0] == lineNumber:
            print("Is equal", row)
            break
相关问题