我收到错误IndexError:列表索引超出范围。 我想把字典数据放到模型(用户)。 我写了
book2 = xlrd.open_workbook('./data/excel1.xlsx')
sheet2 = book2.sheet_by_index(0)
for row_index in range(1,sheet2.nrows):
rows = sheet2.row_values(row_index)
print(rows)
user3 = User.objects.filter(user_id=rows[0])
if user3:
user3.update(talk1=rows[2],characteristic1=rows[3],talk2=rows[4],characteristic2=rows[5],
talk3=rows[6], characteristic3=rows[7],talk4=rows[8], characteristic4=rows[9],
talk5=rows[10], characteristic5=rows[11],talk6=rows[12], characteristic6=rows[13],
talk7=rows[14], characteristic7=rows[15], talk8=rows[16], characteristic8=rows[17])
但是,行的索引数与每个list.rows类似
['001200cd3eF', 'Tom', 'Hi', 'greeting', 'Goodmorning', 'greeting', 'Bye' 'say good‐bye', '', '', '']['007700ab7Ws', 'Blear', 'How are you', 'greeting', 'Thx', 'Thanks', '', '', '']
所以每个列表的索引数不同,max index为13。 models.py是
Class User(models.Model):
talk1 = models.CharField(max_length=500,null=True)
talk2 = models.CharField(max_length=500, null=True)
talk3 = models.CharField(max_length=500, null=True)
talk4 = models.CharField(max_length=500, null=True)
talk5 = models.CharField(max_length=500, null=True)
talk6 = models.CharField(max_length=500, null=True)
talk7 = models.CharField(max_length=500, null=True)
talk8 = models.CharField(max_length=500, null=True)
characteristic1 = models.CharField(max_length=500,null=True)
characteristic2 = models.CharField(max_length=500, null=True)
characteristic3 = models.CharField(max_length=500, null=True)
characteristic4 = models.CharField(max_length=500, null=True)
characteristic5 = models.CharField(max_length=500, null=True)
characteristic6 = models.CharField(max_length=500, null=True)
characteristic7 = models.CharField(max_length=500, null=True)
characteristic8 = models.CharField(max_length=500, null=True)
如果列表没有值,我想把null。我该怎么解决这个问题?我该怎么写呢?
答案 0 :(得分:1)
与字典不同,没有安全的方法来访问列表中可能不存在的索引。
在你的例子中,我理解在某些行中你不会有索引16,17等......
我建议你看一下这个答案:https://stackoverflow.com/a/5125636/3620496
在user3.update()
中,您可以safe_list_get(rows, index_you_want, 'Default Value you want')
看看这些答案,他们都可以给出一些答案元素:Getting a default value on index out of range in Python
答案 1 :(得分:1)
你可以像索引错误一样处理那个列表,你可以添加额外的索引值为空值
rows=sheet2.row_values(row_index)
append_empty = ['','','','',''] #here mention how many empty index as you need
rows = rows + append_empty
#goes to your update logic