如何在特定列的列表中编写项目

时间:2013-10-21 20:07:27

标签: python csv

我有代码在第1,2和3列重复写入我的列表(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列开始呢?

2 个答案:

答案 0 :(得分: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)

现在每个row都是来自info_source的元素,与132433452345234234配对,循环播放直至info_source为耗尽。

答案 1 :(得分: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