2013-10-21 82 views
0

我有一些代碼寫我的名單(3項)多次跨越,列1 2,3,重複下來CSV:如何寫一個列表中的項目下的特定列

list = [13243, 3452345, 234234] 

def listplace(in_path): 
    file_obj = open(in_path, 'wb') 
    writer = csv.writer(file_obj) 

    for row in in_path: 
     for column in row: 
      writer.writerows([list]) 


    file_obj.close() 

這裏是輸出,這將覆蓋我需要保持在第1列的信息:

13243 3452345 234234 
13243 3452345 234234 
13243 3452345 234234 
13243 3452345 234234 
13243 3452345 234234 
13243 3452345 234234 

我想有這樣的輸出(遍歷每個項目,直到在列1中沒有更多的信息,用頭):

Header Header 
info 13243 
info 3452345 
info 234234 
info 13243 
info 3452345 
info 234234 
info 13243 
info 3452345 
info 234234 
info 13243 
info 3452345 
info 234234 
info 13243 

這是否需要迭代循環?如果是這樣,我該如何在第2行第2列開始呢?

+0

保存自己的一些輸入內容,並用'writer.writerow(list)'一次寫入一行。 –

+0

這裏的主要區別是writerow() - 沒有,或者沒有括號?這個編輯有什麼不同? – gigawatts

+0

兩者; ''編寫者()'期望列表的行,但你只傳入*一個*。 'writerow()'期待一行。 –

回答

0

使用itertools.cycle()來重複一些信息。您可以使用itertools.izip()與配對重複列無論你的第一列生產值也:

from itertools import izip, cycle 

def listplace(in_path): 
    with open(in_path, 'wb') as file_obj: 
     writer = csv.writer(file_obj) 

     for row in izip(info_source, cycle([13243, 3452345, 234234])): 
      writer.writerow(row) 

現在每個rowinfo_source一個元素,無論是132433452345234234配對,騎自行車,直到info_source耗盡。

+0

來自'in_path'的元素將是文件名的字符,不是嗎?我認爲OP的原始代碼中存在一個重新使用這個變量的錯誤。 – beroe

+0

@beroe:好點;取而代之的是,我已經取代了對「info_source」的更短暫的引用。 –

+0

in_path在列1中有值我需要保留 - 所以在這種情況下,是info_source == in_path? – gigawatts

0

對我而言,在寫入代碼時,您的代碼在in_path的行上迭代是沒有意義的?即使這是你想要做的,在你重新創建你的源文件之前,它只會給你一次測試輸入。

如果你有一個包含只有object在這行輸入文件,並希望寫在一列的三個值旁邊object你可以這樣做:

def listplace(in_path): 
    with open(in_path, 'r') as file_obj: 
     with open(out_path,'wb') as output_obj: 
      writefile = csv.writer(output_obj) 
      val_list = [13243, 3452345, 234234] # don't use "list" as a var name 

      # iterate over rows in input file, not output file... 

      for i,row in enumerate(file_obj): 
       obj_col = split(row)[0].rstrip() # whatever that object value might be 

       selected_val = val_list[i%3] # use the remainder to select from list 

       writefile.writerow([obj_col,selected_val])  

你必須定義in_pathout_path ...

這將使用mod操作爲您的文件中的每一行獲取0,1,2

相關問題