首页 > 解决方案 > 合并2个文本文件并在python中创建一个新文件

问题描述

我有 2 个大文本文件,例如以下小示例。有 2 个文件 ( major and minor)。在majorminor文件中都有 4 列。在主文件中,10000 中第 2 列和第 3 列之间的差异以及第 2 列和第 3 列之间的差异是 32 或 31 或接近 31 但不是那么高的数字。

主要文件的小例子:

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

次要文件的小例子:

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

前 4 列来自minor file,最后 3 列来自major file。查看预期输出,2nd3rd列(来自次要文件)中的数字在同一行的范围内,但是columns 67(来自主要文件)和第一列等于5th列(实际上是主要和第一列的第一列)次要文件)。事实上,我想在次要文件中查找第一列等于主要文件第一列的行,2nd并且3rd同一行(在次要文件中)的列必须在一个范围2nd3rd主要文件中的列。所以实际上,次要文件中的每一行都有 3 个条件有资格包含在输出文件中。最后 3 列来自主要文件,适合次要文件中的行。

我正在尝试在 python 中执行此操作并编写了以下代码,但它没有返回我所期望的:

major = open("major.txt", 'rb')
minor = open("minor.txt", 'rb')
major_list = []
minor_list = []
for m in major:
    major_list.append(m)

for n in minor:
    minor_list.append(n)

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)


with open('output.txt', 'w') as f:
    for item in final:
        f.write("%s\n" % item)

标签: python

解决方案


也许它是您的代码中的错字我可以看到您在 if minor_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)

推荐阅读