尝试这个:
f2 = open('accessionids.txt','r')f1 = open('fasta.txt','r')f3 = open('fasta_parsed.txt','w')AI_DICT = {}for line in f2: AI_DICT[line[:-1]] = 1skip = 0for line in f1: if line[0] == '>': _splitline = line.split('|') accessorIDWithArrow = _splitline[0] accessorID = accessorIDWithArrow[1:-1] # print accessorID if accessorID in AI_DICT: f3.write(line) skip = 0 else: skip = 1 else: if not skip: f3.write(line)f1.close()f2.close()f3.close()先简单介绍一下这是怎么回事......这里
accessionids.txt是你的 文件2 ,而
fasta.txt为你的 文件1
。显然,您需要用代码中的实际文件名替换这些文件名。
首先,我们创建一个字典(有时称为哈希或关联数组),并为 文件2中的 每个Accession ID创建一个条目,其中 键 为Accession
ID,并且 值 设置为1(这并不意味着该值确实很重要)在这种情况下)。
接下来,我们查看 文件1,
然后再次查看该文件中的每一行。如果文件中的行以开头,
>那么我们知道它包含一个登录ID。我们将这一行并沿分割,
|因为每个具有Accession
ID的行在
|字符串中都会有一个。接下来,按照的指定进行分割的第一部分
_splitline[0]。我们
accessorIDWithArrow[1:-1]用来截断字符串中的第一个和最后一个字符,它们是
>前面的符号和后面的空白。
此时,
accessorID现在包含我们希望从 文件2 获得的格式的登录ID 。
接下来,我们检查之前创建并填充的词典是否将此访问ID定义为键。如果是这样,我们立即将具有登录ID的行写入新文件
fasta_parsed.txt,并将
skip‘flag’变量设置/重置为
0。然后,
else包含该
ifnot skip段的语句将允许与我们发现要打印到
fasta_parsed.txt文件的登录号关联的后续行。
对于保藏ID从 文件1 不在字典中(未在发现 文件2
),我们没有行写入
fasta_parsed.txt和我们设置
skip标志为0。因此,直到另一个登录ID是在发现 文件1 中存在的
文件2 ,所有后续行都将被跳过。



