连接CSV文件中的行使用islice

时间:2018-05-15 04:13:59

标签: python python-2.7 csv

基本上,我有一个列表,表明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循环发生了什么吗?或者是附加列表部分的问题?

1 个答案:

答案 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)