在非制表符分隔文件中查找序列

时间:2013-07-31 15:29:38

标签: python fasta

今天我又遇到了一个问题。

我的文件看起来像:

档案A

>chr1
ACGACTGACTGTCGATCGATCGATGCTCGATGCTCGACGATCGTGCTCGATC
>chr2
GTGACGCACACGTGCTAGCGCTGATCGATCGTAGCTCAGTCAG
>chr3
CAGTCGTCGATCGTCGATCGTCG

等等(基本上是FASTA文件)。

在其他文件中,我有一个很好的制表符分隔我的阅读信息:

档案B

chr2 0 * 2S3M5I2M1D3M * CACTTTTTGTCTA NM:i:6

这两个文件都非常庞大

我想写下需要完成的所有事情,只有我遇到问题的部分:

如果文件B中的chr2与文件A中的行> chr2匹配,则按文件A的顺序查找CACTTTTTGTCTA(fileB)(仅在> chr2区域中按顺序查找。接下来> chr是不同的染色体所以我不喜欢我想在那里搜索。

为了简化这一点,我们来看一下:文件A中的CACACGTGCTAG序列

我正在尝试将字典用于文件A,但这完全不可行。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

类似的东西:

for req in fileb:
   (tag, pattern) = parseB(req)
   tag_matched = False
   filea = open(file_a_name)
   for line in filea:
       if line.startswith('>'):
           tag_matched = line[1:].startswith(tag)
       elif tag_matched and (line.find(pattern) > -1)
           do_whatever()
    filea.close

如果你可以编写一个parseB函数,那么应该完成这项工作。

答案 1 :(得分:0)

字典查找速度很快,因此看起来需要花费很长时间的部分必须在序列中进行搜索。 string.contains()是用C实现的,所以非常有效。如果这还不够快,您可能需要使用更专业的算法来提高效率,如下所述:Python efficient way to check if very large string contains a substring