我有两个文件:A&乙
文件A是制表符分隔的,具有特定的排序顺序。我想对文件B中的所有行进行排序,以便两个文件中的所有行完全匹配。
这是文件A的格式(已排序的文件):
#chr #start #end #name #score #strand
chr1 161427010 161427243 Larp7-Chip.MACS2_peak_9704 0.0 .
chr1 161423805 161424053 Larp7-Chip.MACS2_peak_9703 0.0 .
chr1 161429385 161429489 Larp7-Chip.MACS2_peak_9705 0.0 .
这是文件B的格式(我想要排序的文件):
#chr #start #end #name #score #strand #genechr #genestart #geneend #genename #genescore #genestrand
chr1 1057669 1058006 Larp7-Chip.MACS2_peak_175 0 . chr1 1017198 1051736 C1orf159 0 -
chr1 1058881 1058914 Larp7-Chip.MACS2_peak_176 0 . chr1 1017198 1051736 C1orf159 0 -
chr1 1063389 1063653 Larp7-Chip.MACS2_peak_181 0 . chr1 1072397 1079434 LINC01342 0 +
正如您所看到的,文件B提供的信息多于文件A,这就是为什么我需要匹配排序顺序,以便我可以从文件B中获取重要信息。
基本上我的输出(我们称之为文件C)应如下所示:
#chr #start #end #name #score #strand #genechr #genestart #geneend #genename #genescore #genestrand
chr1 161427010 161427243 Larp7-Chip.MACS2_peak_9704 0 . chr1 161475205 161489360 FCGR2A 0 +
chr1 161423805 161424053 Larp7-Chip.MACS2_peak_9703 0 . chr1 161475205 161489360 FCGR2A 0 +
chr1 161429385 161429489 Larp7-Chip.MACS2_peak_9705 0 . chr1 161475205 161489360 FCGR2A 0 +
注意:我无法使用第四列来匹配和排序文件。有多个重复,因此会导致问题。排序顺序必须与前三列匹配。
编辑:为清楚起见,文件A包含有关人类基因组中增强子区域的信息。文件B具有相同的增强子信息,但有关于每个增强子区域附近相关基因的额外信息。
我想输出一个新文件,其中包含文件B中的所有信息,但遵循与文件A相同的行顺序。两个项目的数量相同。
这可以在Python 3中完成吗?我对编程很陌生,但有了一些帮助,我应该能够使这个工作。这也是我在工作中做的一项非常普遍的任务,因此将这个脚本放在未来将是非常棒的!
谢谢!
答案 0 :(得分:1)
我认为前6个cols足以唯一标识您的记录:
def getKey (x):
keys = x.split()[0:6]
keys[4] = float(keys[4])
return tuple(keys)
rows_of_fileB = dict( [ getKey(r), r] for r in fileB)
for row in fileA:
print( rows_of_fileB[getKey(row)] )