使用 python 搜索特定的重复

输入文件的一个例子:


1  AAcgGGGGGGtacctgt    yes

2  TTcccccctgtAAcgta   no

3  tcgAAAAaatacgacc     no

4  AAcgtataatacctgt   no

...

我想编写一个程序来扫描每个序列并检查单体核苷酸重复 (mnr)


示例输出:


1,AAcgGGGGGGtacctgt,yes

2,TTcccccctgtAAcgta,no

定义:单体核苷酸是:A、T、C、G的重复(不区分大小写)


我在连续寻找将是这样的: AAAAaaAAgtc 或 gtAAAAAAAAAAc 或 aaaaaaAAA 或 aaaaaaaaaa 或 ccccccccccc 或 CCCCCcccCCC 或...


我试过这个正则表达式但不起作用:


import csv

import re

list=[]

with open('sequences.txt', 'r') as f:

    reader = csv.reader(f,delimiter="\t")

    seq=re.findall(r'[Aa]{6, }','sequences.txt')

    for line in reader:

        if line.__contains__(seq):

            print(list.append(line))

任何帮助表示赞赏。


MM们
浏览 172回答 2
2回答

慕田峪7331174

这是您想要的紧凑解决方案:import csvwith open('sequences.txt', 'r') as f:    reader = csv.reader(f, delimiter=",")    for line in reader:        seq_lower = line[1].lower()        if 'aaaaaa' in seq_lower or 'cccccc' in seq_lower or 'tttttt' in seq_lower or 'gggggg' in seq_lower:            print(line)在这里,我假设您在a,c,g,t处理 DNA 序列时只考虑 mnrs 。

开满天机

此后提出了使用正则表达式的部分解决方案。请注意,以下解决方案不适用于使用正则表达式,而是查找长度为 6 或更多的任何字符的任何序列。测试数据:number,sequence,status1,kjhfklashfkldflkhasdfl,02,aaaaaljgkldfkjgldkfjgfldj,03,bbbbbbjigdfsjgjg,04,ccCccCCcjjfijsdfjsdf,05,klsjdflsjdfhdddddjnjlkhngjk,06,kjkljfhnlasjkdfheeeeeeejjjeeeeeeeeeekjdkljfleeef,07,jhfshffFffFFFFffkljjjj908u89,0查找长度为 6 或更大的 MNR 的代码:import csvdef contains_mnr(sequence):    start_char = "$" # choose a character that is sure not to be in the sequence    count = 0    seq_lower = sequence.lower()    for pos in range(0, len(seq_lower)):        if seq_lower[pos] == start_char:            count += 1        else:            start_char = seq_lower[pos]            count = 1        if count >= 6:            return True    return Falsewith open("input.csv", "r") as input_file:    with open("output.csv", "w") as output_file:        reader = csv.DictReader(input_file, dialect=csv.unix_dialect())        writer = csv.writer(output_file, dialect=csv.unix_dialect())        writer.writerow(reader.fieldnames)        for row in reader:            if contains_mnr(row["sequence"]):                writer.writerow([                    row["number"],                    row["sequence"],                    row["status"]                ])请注意,可能需要根据运行代码和生成数据文件的系统调整 CSV 方言。输出上面给出的测试数据:"number","sequence","status""3","bbbbbbjigdfsjgjg","0""4","ccCccCCcjjfijsdfjsdf","0""6","kjkljfhnlasjkdfheeeeeeejjjeeeeeeeeeekjdkljfleeef","0""7","jhfshffFffFFFFffkljjjj908u89","0"
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python