使用 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]])
我有一个 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]])