我有代码在第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列开始呢?
答案 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
的元素,与13243
,3452345
或234234
配对,循环播放直至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_path
和out_path
...
当您通过时,这会使用mod
操作为文件中的每一行获取0,1,2
。