Python脚本使用一个文件中的坐标,并从另一个文件中的匹配坐标添加值

时间:2014-04-06 20:50:22

标签: python dictionary bioinformatics genome

我在制表符分隔的床文件中有一组原始基因组坐标(chrom,start,end)。我还有其他制表符分隔的床文件,其中包含一些原始基因组坐标以及与这些坐标相关的数值。这些坐标可以在床文件中多次出现,每次都有不同的数值。我需要一个最终的床文件,其中包含每个原始基因组坐标,以及找到的与该特定坐标相关的所有值的总和。我正在使用的文件示例如下。

原始文件:

chr1    2100    2300

chr2    3300    3600

chr1    2560    2800

其他床位文件:

chr1    2100    2300    6

chr2    3300    3600    56

chr1    2100    2300    10

需要的输出文件:

chr1    2100    2300    16

chr2    3300    3600    56

chr1    2560    2800    0

我需要编写一个python脚本来执行此操作,但我不确定最好的方法是什么。

2 个答案:

答案 0 :(得分:1)

这是熊猫非常容易做到的事情之一:

import pandas
coordnames = ['Name', 'x', 'y']
f1 = pandas.read_table('file1', delimiter=r' +', 
                       names=coordnames).dropna()
f2 = pandas.read_table('file2', delimiter=r' +', 
                       names=coordnames + ['n']).dropna()
result = (f1.merge(f2, on=coordnames, how='left')
          .groupby(coordnames).sum().fillna(0))

答案 1 :(得分:0)

def fetch_data(filename1, filename2):
    lines = []
    data = {}
    with open (filename1) as f:
        lines = f.readlines()

    for line in lines:
        if not line.strip():
            continue
        data[' '.join(line.split())] = 0

    with open (filename2) as f:
        lines = f.readlines()

    for line in lines:
        if not line.strip():
            continue
        arr = line.split()
        data[' '.join(arr[:-1])] += int(arr[3])

    return data


with open ('output.txt', 'w') as f:
    for key,value in fetch_data('original.txt','data.txt').iteritems():
        f.write('{0}    {1} \n\n'.format('    '.join(key.split()), str(value)))