Конкатенация строк в файле CSV Использование islice - PullRequest
0 голосов
/ 15 мая 2018

По сути, у меня есть список, в котором указан номер строки файла CSV, и я хочу объединить строки, следующие за списком.

Например, мой список [0, 7, 10, 11, 27, 31]

Это означает, что я хочу объединить свои строки из строки 1 в строку 7 в одну строку.

Строки от 8 до 10 в один ряд.

Строки с 11 по 11 (та же самая строка, поэтому она просто ничего не будет делать)

Строка от 12 до 27

Строка от 28 до 31

Я пытался использовать цикл while и islice из itertools. Тем не менее, я получаю только вывод строки 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 голосов
/ 15 мая 2018

Я исправил код, в основном вам нужно изменить способ реализации 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...