今天我又遇到了一个问题。
我的文件看起来像:
档案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,但这完全不可行。
有什么建议吗?
答案 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