Разбить строку с разделителями с одинаковой категорией в таблице с двумя столбцами, используя Python 3

У меня есть таблица из 2 столбцов, которая состоит из элементов в 1-м столбце и цветовых категорий во 2-м, с элементом и цветами, разделенными табуляцией:

car blue
bicycle;scooter green
boat yellow
firetruck;airplane;skateboard red
motorcycle black

Я хотел бы преобразовать таблицу / список, чтобы читать:

car blue
bicycle green
scooter green
boat yellow
firetruck red
airplane red
skateboard red
motorcycle black

Я думал, что мне нужно иметь функцию, определенную для обработки разбиения строки с разделителями в столбце 1 и записи соответствующей категории во 2-м столбце для каждой строки / строки.

Я думаю, что логика в основном гласит:

with open('colors_in.txt', 'rt') as src:
with open('colors_out.txt', 'wt') as dest:

#store column 2 category in a variable and break apart the string at the delimiter in new lines + category
def splitter()
    colorval = (row[1] for row in src)
    for line in src:
        for word in line.split(';'):
            dest.write(word.rstrip() + colorval + '\n')

if ";" in line:
    splitter()
else:
    for line in src:
        dest.write(line)

Я искал подходы к этой проблеме и видел некоторые довольно сложные элементы, включающие numpy и imap(), которые я не совсем уверен, как включить. Я знаю, что приведенный выше код абсолютно неверен - просто попытался выразить как можно лучше то, что я хочу, чтобы код делал / выполнял. Был бы признателен за любое понимание - спасибо!

1 ответ

Решение

В вашем псевдокоде много проблем (не о проблемах синтаксиса, а о логических проблемах).

я хотел бы использовать csv Модуль для этого. Просто прочитайте каждую строку, разбейте первые столбцы на основе ';' если нет ';' вы получите список из одного элемента обратно, если есть ';' Вы получите обратно разделенный список, а затем запишите его обратно в другой CSV, используя это значение с row[1] (второй элемент строки).

Пример -

with open('colors_in.txt', 'r') as src, open('colors_out.txt', 'w') as dest:
    reader = csv.reader(src,delimiter='\t')
    writer = csv.writer(dest,delimiter='\t')
    for row in reader:
        for col1 in row[0].split(';'):
            writer.writerow([col1,row[1]])
Другие вопросы по тегам