从列表中创建CSV文件中的新列

时间:2016-03-30 15:39:54

标签: python file csv writing

我一直在试图找出如何获取列表并使用它在我的csv文件中创建一个新列。我的想法是我有一个cvs文件,我已经取了每行的最后一项来创建一个列表,将它洗牌然后我需要将它添加到文件的末尾。

我遇到的一些问题但我认为已经解决的问题是: Python不会附加字符串列表,所以我转换为int。 删除列标题并将其重新添加。

到目前为止我所拥有的是:

def fun():
    import csv
    import random

    f = open('CSVFUN.csv')
    csv_f = csv.reader(f)
    ISI = []

    for line in csv_f:
        ISI.append(line[4])
    ISI = ISI[1:]
    random.shuffle(ISI)
    delay = [int(i) for i in ISI]
    print(delay)

    with open('CSVFUN.csv','r') as csvinput:
        with open('CSVOUTPUT.csv','w') as csvoutput:
            writer = csv.writer(csvoutput, lineterminator='\n')
            reader = csv.reader(csvinput)

            for row in reader:
                if row[0] == 'practicesentence':
                    writer.writerow(row+['FINALaudioDelay'])
                else:
                    for i in delay:
                        writer.writerow(row+[delay[i]])

我认为我现在遇到的问题是我的最后一个else语句正在迭代我的延迟列表并将列表的每个元素添加到一行中的每个元素。因此,第1项获得8次延迟,第2项获得8次延迟,依此类推。

我想要的是第1项第一次延迟,项目2第二次延迟,依此类推。

我觉得我犯了某种愚蠢的错误,但我无法弄清楚它是什么......

1 个答案:

答案 0 :(得分:0)

如果要访问delay的第i个元素,那么您的代码是正确的。但是,由于您说for i in delayi已经是delay的元素。尝试在最后一行中仅更新delay[i] i。一个例子如下

list = [5, 4]
for i in list:
    print i

那将返回:

5
4

但是,如果你这样做:

list = [5, 4]
for i in list:
    print list[i]

这不会起作用,因为list只有索引为0和1而不是4和5的元素。