Получение ошибки: список индекса вне диапазона - PullRequest
0 голосов
/ 02 мая 2019

при выполнении этой части моего кода я получаю вышеуказанную ошибку, файл csv имеет 3 значения в строке, сначала имя, затем номер идентификатора, и, наконец, числовую оценку. Я не могу понять, почему он говорит, что индекс списка находится вне диапазона.

когда я изменяю код внутри цикла for, чтобы просто напечатать строку, он печатает его, как если бы это был список с 3 значениями.

CSV-файл выглядит так

Sean, 12,15

гарри, 132,12

Бен, 3322,11

и т. Д.,

Я просмотрел файл, чтобы узнать, не было ли в каждой строке по 3 значения в каждой, но это не так. Каждая строка имеет ровно 3 значения, разделенных 2 запятыми.

 points=[]
 names = []
 ids = []
 quiztakers = 0 
 totalscore = 0 
 with open('scoreFilecsv','r+') as score:
     reader = csv.reader(score,delimiter=',')
     for row in score:

         point = row[2]
         totalscore += point
         quiztakers += 1
         name = row[0]
         ids1 = row[1]
         points.append(point)
         names.append(name)
         ids.append(ids1)

1 Ответ

0 голосов
/ 02 мая 2019
  • Ниже приведен код, который я пробовал, и он работает

    points=[]
    names = []
    ids = []
    quiztakers = 0 
    totalscore = 0
    i = 0
    score = ["sean",12,15, "harry",132,12]
    new_row = []
    for row in score:
    
        if i != 0 and i%3 == 0:
            point = new_row[2] 
            totalscore += point
            quiztakers += 1
            name = new_row[0]  
            ids1 = new_row[1]  
            points.append(point)
            names.append(name)
            ids.append(ids1)
            new_row = []
        new_row.append(row)
        i += 1
    else:
        point = new_row[2] 
        totalscore += point
        quiztakers += 1
        name = new_row[0]  
        ids1 = new_row[1]  
        points.append(point)
        names.append(name)
        ids.append(ids1)
        new_row = []
    
    print(names)
    print(points)
    print(ids)
    
  • Вывод:

    ['sean', 'harry']
    [15, 12]
    [12, 132]
    
  • Глядя на ваш код, я верю в список row, потому что длина списка row в какой-то момент будет определенно меньше, чем 2

  • Я думаю, что выхотел быть reader переменной там вместо score переменной (я предполагаю, что смотрю на ваш код, но я не уверен, так как я не знаю, что вы вводите в EXCEL, это в той же строке или в разных строках?)

     points=[]
     names = []
     ids = []
     quiztakers = 0 
     totalscore = 0 
     with open('scoreFilecsv','r+') as score:
    
         reader = csv.reader(score,delimiter=',')
         for row in score: # (Changing this line) for row in reader
    
             point = row[2] # you may be getting error here
             totalscore += point
             quiztakers += 1
             name = row[0]  # you may be getting error here
             ids1 = row[1]  # you may be getting error here
             points.append(point)
             names.append(name)
             ids.append(ids1)
    
  • Но, глядя на ваше описание ввода в вопросе, это то, что я бы сделал

     points=[]
     names = []
     ids = []
     quiztakers = 0 
     totalscore = 0
     i = 0
     with open('scoreFilecsv','r+') as score:
         reader = csv.reader(score,delimiter=',')
         new_row = []
         for row in reader:
    
             if i != 0 and i%3 == 0:
                 point = new_row[2] 
                 totalscore += point
                 quiztakers += 1
                 name = new_row[0]  
                 ids1 = new_row[1]  
                 points.append(point)
                 names.append(name)
                 ids.append(ids1)
                 new_row = []
             new_row.append(row)
             i += 1
        else:
            point = new_row[2] 
            totalscore += point
            quiztakers += 1
            name = new_row[0]  
            ids1 = new_row[1]  
            points.append(point)
            names.append(name)
            ids.append(ids1)
            new_row = []
    
  • Так как выобновил ваш вопрос и введите: я пойду с кодом ниже

     points=[]
     names = []
     ids = []
     quiztakers = 0 
     totalscore = 0 
     with open('scoreFilecsv','r+') as score:
    
         reader = csv.reader(score,delimiter=',')
         for row in reader: # (Changing this line) for row in reader
             row = row.split(",")
             point = row[2] 
             totalscore += point
             quiztakers += 1
             name = row[0]  
             ids1 = row[1]  
             points.append(point)
             names.append(name)
             ids.append(ids1)
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...