Транспонировать список в строки данных
У меня есть данные в файле, как это:
196465702|91017022|['95592022', '96094942', '100920382']|91048702
и я буду преобразовывать данные, как показано ниже:
196465702|91017022|95592022|91048702
196465702|91017022|96094942|91048702
196465702|91017022|100920382|91048702
Пока я пытался написать это. Не уверен, что это точный и оптимальный способ. Более того, если есть список в 4-м столбце и 5-м столбце и т. Д., Становится сложно зацикливаться для каждого столбца и присоединяться обратно.
import csv
with open('sample.out','r') as x:
f = csv.reader(x,delimiter='|')
for row in f:
s = row[2].translate(None,"'")
#print s.split(',')
for t in s.split(','):
print row[0]+'|'+row[1]+'|'+t.translate(None,"[None]")+'|'+row[3].translate(None,"None")
Есть ли лучший способ написать это? Кроме того, если у данных есть Список в нескольких столбцах, есть ли лучший способ идентифицировать и транспонировать строки и объединять их с остальными данными?
1 ответ
Решение
Я бы сделал это так
data = "196465702|91017022|['95592022', '96094942', '100920382']|91048702"
from ast import literal_eval
first, second, third, last = data.split("|")
third = literal_eval(third)
for item in third:
print "{}|{}|{}|{}".format(first, second, item, last)
Выход
196465702|91017022|95592022|91048702
196465702|91017022|96094942|91048702
196465702|91017022|100920382|91048702