2016-03-30 98 views
1

我一直想弄清楚如何獲取列表並使用它在我的csv文件中創建一個新列。這個想法是我有一個cvs文件,我已經把每一行的最後一個項目創建一個列表,隨機播放它,然後我需要將它添加到文件的末尾。從列表中創建一個CSV文件的新列

我碰到的一些問題,但'想'我已經修復了: 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與第一延遲,第二項與第二延遲等。

我覺得我在做某種愚蠢的錯誤,但我只是無法弄清楚它是什麼....

回答

0

如果您要訪問的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.