我正在将注册表中的电话号码列表生成为Python列表。然后,我想遍历此列表,并将其添加到已经存在的CSV文件中间的新列中。该列是CSV中的索引9。下面是我尝试编写的代码,但出现“列表索引超出范围错误”。
import csv
with open('input.csv','r') as csvinput:
with open('output.csv', 'w') as csvoutput:
writer = csv.writer(csvoutput)
i=0
for row in csv.reader(csvinput):
row[9]=writer.writerow(phone_list[i])
i+=1
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-10-74ca13edafc8> in <module>()
6 i=0
7 for row in csv.reader(csvinput):
----> 8 row[9]=writer.writerow(phone_list[i])
9 i+=1
IndexError: list index out of range
感谢您的帮助。
答案 0 :(得分:1)
您的代码几乎可以正常工作,您可以使用zip()
遍历输入文件和电话列表,而不必使用i
变量作为数字索引:>
for row, phone in zip(csv.reader(csvinput), phone_list):
row[9] = phone
writer.writerow(row)
现在,如果您仍然得到IndexError
,则表示您的csv文件中的某些行不包含10列(第一行是索引,因为索引从0开始,所以它是第十列)。仔细检查您的csv文件。尝试以下测试代码进行检查:
for row, phone in zip(csv.reader(csvinput), phone_list):
if len(row) < 10:
print('FOUND A ROW WITH {} COLUMNS: '.format(len(row)), row)
else:
row[9] = phone
writer.writerow(row)
另一种解决方案是将空列添加到少于10列的每一行中完成10列:
for row, phone in zip(csv.reader(csvinput), phone_list):
row.extend(['']* (10 - len(row)))
row[9] = phone
writer.writerow(row)
答案 1 :(得分:0)
在for循环中,将新列添加到“行”数组中,然后将该行写入csv。
for row in reader:
row.insert(9, phone_list[i])
writer.writerow(row)
答案 2 :(得分:0)
如果您正在使用水蟒,或者了解熊猫,
some_instance.extend(ModelWithErrors.new(:name, "is gibberish", :height, "is nonsense")