使用 Python 在两列 table 中拆分具有相同类别的分隔字符串 3

Break out delimited string with the same category in a two column table using Python 3

我有一个 2 列 table,其中包含第一列中的项目和第二列中的颜色类别,项目和颜色以制表符分隔:

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

我想将 table/list 转换为:

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

我在想我需要定义一个函数来处理第 1 列中分隔字符串的拆分,并在第 2 列中为每个 row/line.

编写适当的类别

我认为逻辑本质上是这样的:

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(),我不太确定如何合并。我知道上面的代码是非常不正确的——只是试图尽可能地表达我想要的代码 do/accomplish。将不胜感激任何见解 - 谢谢!

你的伪代码有很多问题(不是语法问题,而是逻辑问题)。

我会为此使用 csv 模块。简单地读取每一行,根据 ';' 拆分第一列,如果没有 ';' 你会得到一个元素的列表,如果有 ';' 你会得到拆分列表返回,然后将该值与 row[1](行的第二个元素)一起使用,将其写回另一个 csv。

例子-

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]])