Разбить строку с разделителями с одинаковой категорией в таблице с двумя столбцами, используя 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]])