将每两个行字段转换为包含两行的列

时间:2016-07-21 15:11:12

标签: python loops rows

我想将每两行字段转换为包含两行的列。并为每一行循环此转换

这是输入:

id  refpop001   altpop001   refpop002   altpop002   refpop003   altpop003
id1 6   274 2   93  5   95
id2 202 0   220 0   73  0
id3 166 159 0   173 114 90

这是所需的输出:

id  pop001  pop002  pop003
id1ref  6   2   5
id1alt  274 93  95
id2ref  202 220 73
id2alt  0   0   0
id3ref  166 0   114
id3alt  159 173 90

标题和标识列仅用于说明,在输出中不需要

2 个答案:

答案 0 :(得分:0)

你可以循环输入然后将其拆分,也许就像这个

一样
int i = 0
for row in input:
  row_array = row.split()
  i = i+=1
  ref = row_array[0] + " " + row_array[2] + " " + row_array[4]]
  alt = row_array[1] + " " +  row_array[3] + " " + row_array[5]

  print "id" + i +"ref " + ref
  print "id" + i + "alt" + alt 

实际上没有运行此代码,但是这个想法就是在必要时操纵它。

答案 1 :(得分:0)

鉴于您正在转换文件中的制表符分隔的纯文本,并且您的数据大小没有变化,直接的方法是:

lines=open('file_or_stream_name.txt','r').readlines();

newLines=[]
newLines.append('\t'.join('id','pop001','pop002','pop003')) #header line
for line in lines[1:]:
    elements=line.split('\t')
    newLine=[]
    newLine.append(elements[0]+'ref')
    newLine.extend(elements[1::2])
    newLines.append('\t'.join(newLine))

    newLine=[]
    newLine.append(elements[0]+'alt')
    newLine.extend(elements[2::2])
    newLines.append('\t'.join(newLine))

newText='\n'.join(newLines) #or '\r\n'.join(...), if you're in Windows