2013-07-17 5 views
0

У меня есть "asin.txt" документ:Python 2: IndexError: список индексов вне диапазона

in,Huawei1,DE 
out,Huawei2,UK 
out,Huawei3,none 
in,Huawei4,FR 
in,Huawei5,none 
in,Huawei6,none 
out,Huawei7,IT 

Я открываю этот файл и сделать OrderedDict:

from collections import OrderedDict 
reader = csv.reader(open('asin.txt','r'),delimiter=',') 
reader1 = csv.reader(open('asin.txt','r'),delimiter=',') 
d = OrderedDict((row[0], row[1].strip()) for row in reader) 
d1 = OrderedDict((row[1], row[2].strip()) for row in reader1) 

Затем я хочу создать переменные (a, b, c, d), поэтому, если взять первую строку asin.txt, это должно быть следующим: a = in; b = Huawei1; c = Huawei1; d = DE. Для этого я использую «для» цикла:

from itertools import izip 
for (a, b), (c, d) in izip(d.items(), d1.items()): # here 
    try: 
     ....... 

Он работал раньше, но теперь, по некоторым причинам, он выводит сообщение об ошибке:

d = OrderedDict((row[0], row[1].strip()) for row in reader) 
IndexError: list index out of range 

Как исправить это?

+0

Похоже, какой-то линии в ваших перерывах файлов, имеет только 0 или 1 поле. – zhangyangyu

+0

Вы проверили, что каждая строка в вашем файле находится в том формате, который вы ожидаете? Легко пустые строки ползать в конце, если вы редактируете файл, например. –

ответ

0

Возможно, у вас есть строка в вашем текстовом файле, которая не имеет по крайней мере двух полей, разделенных символом ",". Например .:

in,Huawei1 

Попробуйте найти решение по этим направлениям:

d = OrderedDict((row[0], row[1].strip()) for row in reader if len(row) >= 2) 

или

l = [] 
for row in reader: 
    if len(row) >= 2: 
    l.append(row[0], row[1].strip()) 
d = OrderedDict(l) 
Смежные вопросы