Список индексов выходит за пределы диапазона в csv [duplicate]

Для чего это стоит, это появилось недавно в списке рассылки python-идей . Оказалось, что для этого уже существует рецепт itertools : 1

def all_equal(iterable):
    "Returns True if all the elements are equal to each other"
    g = groupby(iterable)
    return next(g, True) and not next(g, False)

Предположительно, он работает очень хорошо и имеет несколько приятных свойств.

  1. Короткие замыкания: он перестанет потреблять элементы из итерации, как только найдет первый неравный элемент.
  2. Не требует, чтобы элементы были хешируемыми.
  3. ] Он ленив и требует только O (1) дополнительной памяти для проверки.

1Иными словами, я не могу взять кредит на то, чтобы придумать решение - и не может Я признаю, что даже нашел это.

3
задан Sheena 24 October 2012 в 10:47
поделиться

4 ответа

Попробуйте проверить пустые строки. Кроме того, избегайте использования file в качестве имени переменной. "r" - режим по умолчанию с открытым.

import csv

with open(r"C:\Users\me\Desktop\file-2.csv") as f:
     reader = csv.reader(f, delimiter=',', quotechar='"')
     for row in reader:
        if row:
            some=row[1]
6
ответ дан Burhan Khalid 19 August 2018 в 01:47
поделиться
  • 1
    В Python нет file. Даже в Python 2 file является исключением из правила и может использоваться как имя переменной (рекомендуется использовать open() вместо file(), и это слишком хорошее имя, чтобы игнорировать). – jfs 24 October 2012 в 21:46

Этот вопрос старый, но я столкнулся с немного другим решением этой проблемы, поэтому я поставлю его здесь для всех, у кого может быть эта проблема. Мой файл был настолько большим, что я не мог понять его конца. В конце была строка, в которой было всего 2 вещи вместо типичного 5 моего файла, поэтому, когда я попытался получить четвертый столбец, он дал мне эту ошибку. Вот мое решение:

    for row in reader:
        if len(row) > 2:
            array.append(row[3])
0
ответ дан AnnaB 19 August 2018 в 01:47
поделиться

У меня тоже была эта ошибка. Моя проблема была глупой и избегаемой, хотя. Я скопировал какой-то код из другой программы и не изменил разделитель (в моем случае от трубы до запятой), поэтому, конечно, он выходил за пределы своего индекса, ищущего канал, когда его никогда не было.

0
ответ дан Ray Bilton 19 August 2018 в 01:47
поделиться

Похоже, у вас пустая строка или что-то в этом роде. По умолчанию каждая итерация цикла for захватывает строку текста из вашего файла csv. Эта строка текста заканчивается символом новой строки. Итак, если у вас пустая строка, читатель читает ее как нечто подобное [].

Сделайте это, и вы увидите, что я имею в виду:

for row in reader:
    print(repr(row))
    some = row[1]

Вы обнаружите, что последняя строка, которая печатается, не имеет длины 2 или более.

Есть несколько вещей, которые вы можете сделать, чтобы исправить это:

  1. Пропустить файл через некоторый сценарий очистки для удаления пустых строк
  2. изменить распознанный символ новой строки при вызове считывателя
1
ответ дан Sheena 19 August 2018 в 01:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: