Для чего это стоит, это появилось недавно в списке рассылки 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Иными словами, я не могу взять кредит на то, чтобы придумать решение - и не может Я признаю, что даже нашел это.
Попробуйте проверить пустые строки. Кроме того, избегайте использования 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]
Этот вопрос старый, но я столкнулся с немного другим решением этой проблемы, поэтому я поставлю его здесь для всех, у кого может быть эта проблема. Мой файл был настолько большим, что я не мог понять его конца. В конце была строка, в которой было всего 2 вещи вместо типичного 5 моего файла, поэтому, когда я попытался получить четвертый столбец, он дал мне эту ошибку. Вот мое решение:
for row in reader:
if len(row) > 2:
array.append(row[3])
У меня тоже была эта ошибка. Моя проблема была глупой и избегаемой, хотя. Я скопировал какой-то код из другой программы и не изменил разделитель (в моем случае от трубы до запятой), поэтому, конечно, он выходил за пределы своего индекса, ищущего канал, когда его никогда не было.
Похоже, у вас пустая строка или что-то в этом роде. По умолчанию каждая итерация цикла for захватывает строку текста из вашего файла csv. Эта строка текста заканчивается символом новой строки. Итак, если у вас пустая строка, читатель читает ее как нечто подобное [].
Сделайте это, и вы увидите, что я имею в виду:
for row in reader:
print(repr(row))
some = row[1]
Вы обнаружите, что последняя строка, которая печатается, не имеет длины 2 или более.
Есть несколько вещей, которые вы можете сделать, чтобы исправить это:
file
. Даже в Python 2file
является исключением из правила и может использоваться как имя переменной (рекомендуется использоватьopen()
вместоfile()
, и это слишком хорошее имя, чтобы игнорировать). – jfs 24 October 2012 в 21:46