我试图在两个文件中找到常见的id,并将结果打印到一个新文件中,附加与这些文件对应的附加行身份证怎么办我能做这个吗?你知道吗
输入文件1.txt
F775_23607 EMT15298 GO:0003674 molecular_function PF08268 345
F775_00510 EMT20601 GO:0005515 protein binding PF08268 456
F775_00510 EMT23774 GO:0003674 molecular_function PF00646 134
F775_00510 EMT23774 GO:0005515 protein binding PF03106 888
F775_23182 EMT33502 GO:0003677 DNA binding PF03106 789
输入文件2.txt
contig15 EMT15298 95.27 148
contig18 EMT04099 97.95 293
contig18 EMT20601 92.83 293
contig18 EMT23062 93.17 293
所需的输出文件(我希望能够决定哪些行要打印,哪些不打印)
EMT15298 GO:0003674 molecular_function PF08268
EMT20601 GO:0005515 protein binding PF08268
我的脚本(基本上只打印列,这是常见的)
fileA = open("file1.txt",'r')
fileB = open("file2.txt",'r')
output = open("results.txt",'w')
fileA.next()
setA = set()
for line1 in fileA:
listA = line1.split('\t')
setA.add(listA[1])
setB = set()
for line1 in fileB:
listB = line1.split('\t')
setB.add(listB[1])
for key in setA & setB:
output.writelines(key+'\n')
由于您的第一个文本文件包含输出的所有“字段”,我们可以稍微减少逻辑和步骤数。你知道吗
首先,我们打开两个输入文件并将它们读入列表:
现在我们有两个列表,
fileA
和fileB
。你会注意到他们两个的切片符号。因为fileA
包含了您想要的所有输出值,所以它现在已经准备好了,只需要根据第二个列表进行过滤。我还从两个列表中删除了第一项,因此我们可以使用EMT...
值进行比较。你知道吗现在我们可以检查
fileB
是否包含(不是全部)fileA
,并将匹配项写入结果文件:results.txt
再次用相应的匹配项进行制表符分隔:如果您只想执行“join”操作,可以使用unix join命令指定第二列,对于制表符分隔的文件,它将类似于:
您需要对行进行排序,否则它将无法工作,但是您也可以使用同样可用的sort命令。你知道吗
此外,要选择要使用的列,可以使用“管道到剖切”功能:
您可以使用
dict
而不是set
:相关问题 更多 >
编程相关推荐