0

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

我有一个看起来像的文件:

文件 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 使用字典,但这完全不可行。

有什么建议么?

4

2 回答 2

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 函数,应该可以完成这项工作。

于 2013-07-31T15:44:58.153 回答
0

字典查找很快,所以看起来需要很长时间的部分必须在序列中搜索。string.contains() 是用 C 实现的,所以它非常有效。如果这还不够快,您可能需要使用更专业的算法来提高效率,如下所述:Python 有效的方法来检查非常大的字符串是否包含子字符串

于 2013-07-31T15:46:06.327 回答