将列表转置为数据行

时间:2014-02-19 08:56:32

标签: python list python-2.7 delimited

我在这样的文件中有数据:

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

有没有更好的方法来写这个?此外,如果数据在几列中具有List,是否有更好的方法来识别和转置行并与其余数据连接回来?

1 个答案:

答案 0 :(得分:2)

我会这样做的

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