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

Python 尝试访问列表元素时出现索引错误,python,csv,indexing,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,

因此,我有一个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

行[n]中的所有内容似乎都给出了一个错误

您的代码有两个改进:

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
  • 比较相同类型的对象,例如
    int
    int
  • 使用
    next(reader)
    提取
    for
    循环前的第一行
  • 这是重构逻辑的一种方法:

    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
    

    您的代码有两个改进:

  • 比较相同类型的对象,例如
    int
    int
  • 使用
    next(reader)
    提取
    for
    循环前的第一行
  • 这是重构逻辑的一种方法:

    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
    

    您的示例csv文件列出了
    “行号,1”
    -您测试了
    “行号”
    -查看n数字与n数字的大小写

    创建文件并实现您的逻辑:

    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
    

    您的示例csv文件列出了
    “行号,1”
    -您测试了
    “行号”
    -查看n数字与n数字的大小写

    创建文件并实现您的逻辑:

    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
    

    那是个愚蠢的错误。谢谢你向我指出这一点。你完全正确,行号=行[1]而不是行[0]。这是一个愚蠢的错误。谢谢你向我指出这一点。您完全正确,行号=行[1]而不是行[0]。