将Python列表添加到已填充CSV的中间

时间:2018-08-10 17:20:04

标签: python list loops csv

我正在将注册表中的电话号码列表生成为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

感谢您的帮助。

3 个答案:

答案 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")