Ошибка индекса при попытке доступа к элементу списка - PullRequest
0 голосов
/ 16 мая 2018

Итак, у меня есть текстовый документ в стиле 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 голосов
/ 16 мая 2018

В вашем коде есть 2 улучшения:

  1. Сравните объекты одного типа, например int с int.
  2. Используйте 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
0 голосов
/ 16 мая 2018

В вашем примере csv-файлов перечислены 'Line number,1' - вы проверяете на 'Line Number' - посмотрите на заглавные буквы n umber vs N umber .

минимальный проверяемый полный пример , который создает файл и реализует вашу логику:

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
0 голосов
/ 16 мая 2018
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...