2013-10-21 36 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

相关问题