结合2个文本文件并在python中制作一个新文件

时间:2018-10-25 13:49:29

标签: python

我有2个大文本文件,例如以下小示例。有2个文件({{1)}。 在major and minormajor文件中,共有4列。在主文件中,第2列和第3列之间的差异为10000,而第2列和第3列之间的差异为32或31或接近31的数字,但不是很高。

主要文件的小示例:

minor

次要文件的小示例:

chr4    530000  540000  0.0
chr4    540000  550000  1719.0
chr4    550000  560000  0.0

我想创建一个新的文本文件,其中会有4列。像预期的输出一样:

预期输出:

chr4    295577  295608  12
chr4    323326  323357  10
chr4    548873  548904  32
chr4    548873  548904  20
chr4    549047  549078  32
chr4    549047  549078  20
chr4    549137  549168  32
chr4    549137  549168  20
chr4    549181  549212  32
chr4    549181  549212  20
chr4    549269  549300  22
chr4    549269  549300  381
chr4    549269  549300  67
chr4    549269  549300  89
chr4    549269  549300  95
chr4    549269  549300  124
chr4    549269  549300  149
chr4    549269  549300  87
chr4    549269  549300  33
chr4    549269  549300  65
chr4    549269  549300  68
chr4    549269  549300  190
chr4    549269  549300  20
chr4    549355  549386  32
chr4    549355  549386  20
chr4    549443  549474  16
chr4    705810  705841  10
chr4    846893  846924  28

前4列来自chr4 548873 548904 32 chr4 540000 550000 chr4 548873 548904 20 chr4 540000 550000 chr4 549047 549078 32 chr4 540000 550000 chr4 549047 549078 20 chr4 540000 550000 chr4 549137 549168 32 chr4 540000 550000 chr4 549137 549168 20 chr4 540000 550000 chr4 549181 549212 32 chr4 540000 550000 chr4 549181 549212 20 chr4 540000 550000 chr4 549269 549300 22 chr4 540000 550000 chr4 549269 549300 381 chr4 540000 550000 chr4 549269 549300 67 chr4 540000 550000 chr4 549269 549300 89 chr4 540000 550000 chr4 549269 549300 95 chr4 540000 550000 chr4 549269 549300 124 chr4 540000 550000 chr4 549269 549300 149 chr4 540000 550000 chr4 549269 549300 87 chr4 540000 550000 chr4 549269 549300 33 chr4 540000 550000 chr4 549269 549300 65 chr4 540000 550000 chr4 549269 549300 68 chr4 540000 550000 chr4 549269 549300 190 chr4 540000 550000 chr4 549269 549300 20 chr4 540000 550000 chr4 549355 549386 32 chr4 540000 550000 chr4 549355 549386 20 chr4 540000 550000 chr4 549443 549474 16 chr4 540000 550000 ,后3列来自minor file。 查看预期的输出,major file2nd列中的数字(来自次要文件)在同一行的范围内,但3rd和7(来自主要文件)和第一列等于columns 6列(实际上是主要和次要文件的第一列)。 实际上,我想在次要文件中查找第一列等于主文件的第一列的行,而且同一行(在次要文件中)的5th2nd列也必须在主文件的3rd2nd列中。因此,实际上,次要文件中的每一行都有3个条件,可以包含在输出文件中。最后3列来自主要文件,适合次要文件中的行。

我正在尝试在python中完成此操作,并编写了以下代码,但未返回我期望的结果:

3rd

3 个答案:

答案 0 :(得分:0)

也许在您的代码中有错别字,我可以看到您在if_small_list [i]上缺少标签页

final = []
for i in minor_list:
    for j in major_list
    if minor_list[i] == major_list[j] and minor_list[i+1] <= major_list[j+1] and minor_list[i+2] >= major_list[j+2]:
        final.append(i)

应该是

final = []
for i in minor_list:
    for j in major_list
        if minor_list[i] == major_list[j] and minor_list[i+1] <= major_list[j+1] and minor_list[i+2] >= major_list[j+2]:
            final.append(i)

答案 1 :(得分:0)

您应该这样做

final = []
for i, j in zip(minor_list, major_list):
    final.append(i, j)

答案 2 :(得分:0)

您是否为此使用过Python?如果在bash shell中安装“ bedtools”,则可以通过以下代码行完成:

bedtools intersect -wa -wb -a minor.bed -b major.bed > intersected_file.bed

一些生物信息学工具仅适用于linux / mac,因此,如果您要进行任何数量的生物信息学研究,则值得学习如何在Shell中编写脚本。