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

2024-04-19 05:49:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将一个电话号码列表从注册表生成到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

感谢所有的帮助。你知道吗


Tags: csvin列表forinputaswithopen
3条回答

在for循环中,将新列添加到数组“row”,然后将该行写入csv。你知道吗

for row in reader:
     row.insert(9, phone_list[i])
     writer.writerow(row)

您的代码应该可以正常工作,您可以使用zip()同时迭代输入文件和电话列表,而不是使用i变量作为数字索引:

for row, phone in zip(csv.reader(csvinput), phone_list):
    row[9] = phone
    writer.writerow(row)

现在,如果您仍然得到IndexError,这意味着您的csv文件有一行首先不包含10列(索引9是索引从0开始的第10列)。仔细检查你的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)

如果你使用的是水蟒,或者你了解熊猫

import pandas as pd.  # You import the pandas library

input = pd.read_csv("input.csv") #your import csv
output = pd.read_csv("output.csv") #your export csv

input_array = list(input['#Name of column']) #use this if you know the name of the column
input_array = list(input.iloc[:,#index of column]) # use this if you know the index number of the column, index starts from 0

output = output.insert(loc=#the index you want; in this case 9 for the 10th column, column='Name of the new column', value=input_array) # you are inserting the array into output.csv

output.to_csv("path and output.csv",index = False) # we are writing a file, index = false means no new index row columns to be added.





import pandas as pd.  # You import the pandas library

input = pd.read_csv("input.csv") #your import csv
output = pd.read_csv("output.csv") #your export csv

input_array = list(input['Name of column']) #use this if you know the name of the column
input_array = list(input.iloc[:,0]) # Assuming input csv has only 1 column

output = output.insert(loc=9, column='New_column_name', value=input_array) # assuming the array is to be inserted into output.csv, column 10, in which case its 9 in pandas

output.to_csv("path and output.csv",index = False) # we are writing a file, index = false means no new index row columns to be added.

相关问题 更多 >