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

wnrlj8wa  于 2022-12-06  发布在  Python
关注(0)|答案(1)|浏览(144)

我有一个2栏表格,其中第一栏是项目,第二栏是颜色类别,项目和颜色以Tab分隔:

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(),我不确定如何将它们合并。我知道上面的代码非常不正确--只是尽可能地表达了我希望代码做/完成的事情。

pbossiut

pbossiut1#

伪代码有很多问题(不是语法问题,而是逻辑问题)。
我将使用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]])

相关问题