繁体   English   中英

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

[英]Python script to use coordinates from one file and add values from matching coordinates in another file

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

原始文件:

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脚本来执行此操作,但是我不确定如何执行此操作的最佳方法。

这是Pandas非常容易实现的事情之一:

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))
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)))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM