Скрипт Python для использования координат из одного файла и добавления значений из совпадающих координат в другой файл
У меня есть оригинальный набор геномных координат (chrom, start, end) в файле bed с разделителями табуляции. У меня также есть дополнительные файлы постели с разделителями табуляции, которые содержат некоторые исходные геномные координаты плюс числовое значение, связанное с каждой из этих координат. Эти координаты могут появляться несколько раз в файле постели с разными числовыми значениями каждый раз. Мне нужен окончательный файл постели, который содержит каждую из исходных геномных координат с суммированным числом всех найденных значений, связанных с этой конкретной координатой. Примеры файлов, с которыми я работаю, приведены ниже.
Исходный файл:
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 ответа
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)))
Это одна из тех вещей, которые 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))