使用一个文件的坐标并从另一个文件中添加匹配坐标值的Python脚本
我有一组原始的基因组坐标(染色体,起始位置,结束位置),这些数据保存在一个用制表符分隔的bed文件里。同时,我还有一些其他的用制表符分隔的bed文件,这些文件里包含了一些原始的基因组坐标,并且每个坐标都有一个对应的数字值。这些坐标在一个bed文件中可能会出现多次,每次对应的数字值可能不同。我需要一个最终的bed文件,这个文件里包含每个原始的基因组坐标,以及与该坐标相关的所有数字值的总和。下面是我正在处理的文件示例。
原始文件:
chr1 2100 2300
chr2 3300 3600
chr1 2560 2800
其他bed文件:
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 个回答
1
这是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))
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)))