0

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

4

1 回答 1

2

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

我会为此使用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]])
于 2015-08-26T19:24:58.873 回答