0

我有一个包含 7 列的文件,一个具有染色体区域的 GFF 文件。我想将 REGION ="exon" 的行折叠到文件中的一行。必须根据每个区域重叠的区域折叠该行其他。

REGION  START   END  SCORE STRAND FRAME     ATTRIBUTE
 exon   26453   26644   .   +   .   Transcript "XM_092971"; Name "XM_092971"
 exon   26842   27020   .   +   .   Transcript "XM_092971"; Name "XM_092971"
 exon   30355   30899   .   -   .   Transcript "XM_104663"; Name "XM_104663"
 GS_TRAN    30355   34083   .   -   .   GS_TRAN "Hs22_30444_28_1_1"; Name "Hs22_30444_28_1_1"
 snp    30847   30847   .   +   .   SNP "rs2971719"; Name "rs2971719"
 exon   31012   31409   .   -   .   Transcript "XM_104663"; Name "XM_104663"
 exon   34013   34083   .   -   .   Transcript "XM_104663"; Name "XM_104663"
 exon   40932   41071   .   +   .   Transcript "XM_092971"; Name "XM_092971"
 snp    44269   44269   .   +   .   SNP "rs2873227"; Name "rs2873227"
 snp    45723   45723   .   +   .   SNP "rs2227095"; Name "rs2227095"
 exon   134031  134495  .   -   .   Transcript "XM_086913"; Name "XM_086913"            
 exon   134034  134457  .   -   .   Transcript "XM_086914"; Name "XM_086914"            

看上面的示例数据,只有最后两行可以合并为一行。所以,新行将成为。

exon    134031  134495  .   -   .   Transcript "XM_086913"; Name "XM_086913"            

万一,另一行的结尾会大于它的前一个,在这种情况下,那将是 END 区域。基本上,如果有任何重叠,则取较早开始的区域和较晚结束的区域。

这样的实例可以有多行,这里只有最后 2 行。一件事是 ATRRIBUTE 列肯定会为这些行显示不同的成绩单名称,在其他情况下基本相同。

我必须在 Python 中执行此操作,而且我是 Python 的初学者。

4

1 回答 1

1

将其分解为更简单的步骤:

  • 读取文件并将其解析为数据列表
  • 循环您的列表并检查每一行与下一行
  • 将满足您要求的内容添加到新列表中
  • 将新列表保存到新文件或打印到控制台

您可能想要手动移动列表而不是使用for row in mylist这样的:

newlist = []
i = 0
while i < len(mylist):
     if can_collapse( mylist[i], mylist[i+1] ):
         newlist.append[ collapse( mylist[i], mylist[i+1] ) ]
         i += 2
     else:
         newlist.append[ mylist[i] ]
         i += 1
于 2014-03-21T17:57:25.953 回答