【问题标题】:creating a new column in a CSV file from a list从列表中在 CSV 文件中创建新列
【发布时间】:2016-07-18 17:43:13
【问题描述】:

我一直试图弄清楚如何获取一个列表并使用它在我的 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 项与第二次延迟一起使用,依此类推。

我觉得我犯了某种愚蠢的错误,但我就是想不通它是什么......

【问题讨论】:

    标签: python file csv writing


    【解决方案1】:

    如果你想访问delay的第i个元素,那么你的代码是正确的。但是,既然你说for i in delay,那么i已经是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 的元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 2015-08-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2015-09-16
      • 2020-11-02
      相关资源
      最近更新 更多