为了账号安全,请及时绑定邮箱和手机立即绑定

使用 python 搜索特定的重复

使用 python 搜索特定的重复

MM们 2021-12-17 15:55:53
输入文件的一个例子:1  AAcgGGGGGGtacctgt    yes2  TTcccccctgtAAcgta   no3  tcgAAAAaatacgacc     no4  AAcgtataatacctgt   no...我想编写一个程序来扫描每个序列并检查单体核苷酸重复 (mnr)示例输出:1,AAcgGGGGGGtacctgt,yes2,TTcccccctgtAAcgta,no定义:单体核苷酸是:A、T、C、G的重复(不区分大小写)我在连续寻找将是这样的: AAAAaaAAgtc 或 gtAAAAAAAAAAc 或 aaaaaaAAA 或 aaaaaaaaaa 或 ccccccccccc 或 CCCCCcccCCC 或...我试过这个正则表达式但不起作用:import csvimport relist=[]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))任何帮助表示赞赏。
查看完整描述

2 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

这是您想要的紧凑解决方案:


import csv

with 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 。


查看完整回答
反对 回复 2021-12-17
?
开满天机

TA贡献1786条经验 获得超13个赞

此后提出了使用正则表达式的部分解决方案。请注意,以下解决方案不适用于使用正则表达式,而是查找长度为 6 或更多的任何字符的任何序列。


测试数据:


number,sequence,status

1,kjhfklashfkldflkhasdfl,0

2,aaaaaljgkldfkjgldkfjgfldj,0

3,bbbbbbjigdfsjgjg,0

4,ccCccCCcjjfijsdfjsdf,0

5,klsjdflsjdfhdddddjnjlkhngjk,0

6,kjkljfhnlasjkdfheeeeeeejjjeeeeeeeeeekjdkljfleeef,0

7,jhfshffFffFFFFffkljjjj908u89,0

查找长度为 6 或更大的 MNR 的代码:


import csv


def 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 False


with 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"


查看完整回答
反对 回复 2021-12-17
  • 2 回答
  • 0 关注
  • 171 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号