基本上,我有一个列表,表明CSV文件的行号,我想连接列表后面的行。
例如,我的列表是[0, 7, 10, 11, 27, 31]
这意味着我想将我从第1行到第7行的行连接成一行。
第8到第10行到一行。
第11到11行(同一行所以它什么都不做)
第12至27行
第28至31行
我尝试过使用while循环和来自itertools的islice。但是,我只获得第1行到第7行的输出。 这是我的代码。
import csv
from itertools import islice
with open('csvtest.csv', 'rb') as f:
reader = csv.reader(f)
#row1 = next(reader)
merged = []
list = [0, 7, 10, 11, 27, 31]
x=0
while x < len(list):
for line in islice(f, list[x], list[x+1]):
#print line1
line = line.rstrip()
merged.append(line)
x += 1
print merged #gives ['fsfs', 'sf', '1231', 'afsa', '', '', 'asfasfsaf;0'] which is lines 1 to 7
有人会让我知道我的while循环发生了什么吗?或者是附加列表部分的问题?
答案 0 :(得分:0)
我修复了代码,基本上你需要改变如何实现islice
。
根据新信息更新答案。
import csv
from itertools import islice
with open('output2.csv','wb') as w:
writer = csv.writer(w)
delimiter_list = []
merged = []
with open('csvtest.csv', 'rb') as f:
reader = csv.reader(f)
for num, line in enumerate(reader, 1):
line = (" ".join(line))
if line.endswith(';0'):
#print 'found at line:', num
delimiter_list.append(num)
with open('csvtest.csv', 'rb') as f:
x=0
while x < len(delimiter_list)-1:
row = []
# islice(f,N) returns next N lines
for line in islice(f, delimiter_list[x+1]-delimiter_list[x]):
line = line.rstrip()
row.append(line)
x += 1
# add each row to final list
merged.append(row)
print merged
writer.writerows(merged)