Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找序列不匹配的DNA条形码_Python_Awk_Sed_Dna Sequence_Fastq - Fatal编程技术网

Python 查找序列不匹配的DNA条形码

Python 查找序列不匹配的DNA条形码,python,awk,sed,dna-sequence,fastq,Python,Awk,Sed,Dna Sequence,Fastq,我在fastq文件中有36个nt是这样读的:atcttgttcaatgccgatcxxxgtcgaatcaa XXXX是不同的条形码。我想在文件中的准确位置(21到24)搜索条形码,并打印序列中最多有3个不匹配的序列而不是条形码 例如: 我有条形码:aacg 搜索fastq文件中位置21到24之间的条形码,允许按如下顺序出现3个不匹配: atcttgttcaatggccgatcaacggtcgacaatcac # it has 1 mismatch ttcttgttcaatggccgatcaac

我在fastq文件中有36个nt是这样读的:
atcttgttcaatgccgatcxxxgtcgaatcaa
XXXX是不同的条形码。我想在文件中的准确位置(21到24)搜索条形码,并打印序列中最多有3个不匹配的序列而不是条形码

例如: 我有条形码:
aacg
搜索fastq文件中位置21到24之间的条形码,允许按如下顺序出现3个不匹配:

atcttgttcaatggccgatcaacggtcgacaatcac # it has 1 mismatch
ttcttgttcaatggccgatcaacggtcgacaatcac # it has 2 mismatch
tccttgttcaatggccgatcaacggtcgacaatcac # it has 3 mismatch
我试图首先使用awk查找唯一的行,并查找不匹配的行,但查找和查找它们对我来说非常繁琐

awk 'NR%4==2' 1.fq |sort|uniq -c|awk '{print $1"\t"$2}' > out1.txt
我能找到什么快捷的方法吗

谢谢。

使用Python:

import re
seq="atcttgttcaatggccgatcaacggtcgacaatcaa"
D = [ c for c in seq ]
with open("input") as f:
    for line in f:
        line=line.rstrip('\n')
        if re.match(".{20}aacg", line):
            cnt = sum([ 1 for c,d in zip(line,D) if c != d])
            if cnt < 4:
                print cnt, line
strs = "atcttgttcaatggccgatcaacggtcgacaatcaa"

with open("1.fq") as f:
    for line in f:
        if line[20:24] == "aacg":
            line = line.strip()
            mismatches = sum(x!=y for x, y  in zip(strs, line))
            if mismatches <= 3:
                print line, mismatches

atcttgttcaatggccgatcaacggtcgacaatcac 1
ttcttgttcaatggccgatcaacggtcgacaatcac 2
tccttgttcaatggccgatcaacggtcgacaatcac 3
重新导入
seq=“ATCTTGTTCAATGGCGATCAAGGTCGACAATCAA”
D=[c代表序列中的c]
打开(“输入”)作为f:
对于f中的行:
line=line.rstrip('\n')
如果重新匹配(“.{20}aacg”,第行):
cnt=sum([1表示c,如果c!=d,则zip中的d(行,d)])
如果cnt<4:
打印cnt,行
使用Python:

import re
seq="atcttgttcaatggccgatcaacggtcgacaatcaa"
D = [ c for c in seq ]
with open("input") as f:
    for line in f:
        line=line.rstrip('\n')
        if re.match(".{20}aacg", line):
            cnt = sum([ 1 for c,d in zip(line,D) if c != d])
            if cnt < 4:
                print cnt, line
strs = "atcttgttcaatggccgatcaacggtcgacaatcaa"

with open("1.fq") as f:
    for line in f:
        if line[20:24] == "aacg":
            line = line.strip()
            mismatches = sum(x!=y for x, y  in zip(strs, line))
            if mismatches <= 3:
                print line, mismatches

atcttgttcaatggccgatcaacggtcgacaatcac 1
ttcttgttcaatggccgatcaacggtcgacaatcac 2
tccttgttcaatggccgatcaacggtcgacaatcac 3
strs=“ATCTTGTTCAATGCCGATCAAGGTCGACAATCAA”
以开放(“1.fq”)作为f:
对于f中的行:
如果行[20:24]=“aacg”:
line=line.strip()
不匹配=总和(x!=y代表x,y在zip中(strs,行))

如果不匹配使用python正则表达式模块可以指定不匹配的数量

import regex #intended as a replacement for re
from Bio import SeqIO
import collections

d = collections.defaultdict(list)
motif = r'((atcttgttcaatggccgatc)(....)(gtcgacaatcaa)){e<4}' #e<4 = less than 4 errors
records = list(SeqIO.parse(open(infile), "fastq"))
for record in records:
    seq = str(record.seq)
    match = regex.search(motif, seq, regex.BESTMATCH)
    barcode = match.group(3)
    sequence = match.group(0)
    d[barcode].append(sequence) # store as a dictionary key = barcode, value = list of sequences
for k, v in d.items():
    print("barcode = %s" % (k))
    for i in v:
        print("sequence = %s" % (i))
import regex#用于替代re
来自Bio import SeqIO
导入集合
d=集合.defaultdict(列表)

motif=r’((ATCTTGTTCAATGCCGATC)(…)(gtcgacaatcaa)){我很困惑。条形码与核苷酸序列有什么关系?最初我在寻找特定位置的条形码,我得到的计数非常低,序列中有1个错配,我得到的计数很高。因此,如果我给出序列中的错配,我将得到更多序列(我想尝试最多3次)所以你在扫描超市收银员用来识别物品价格的黑白条纹图案?因为我还不知道如何从条形码中提取DNA。@凯文我只是查看了一些输出1 ATCTTGTTCAATGCCGATCAAGCGACAGATCAA 2 ATCTTGTTCAATGCCAATGCCGCGCAAGATCAA,但第二个类似于序列和它在告诉我2个不匹配为什么?序列中一定有2个不匹配原始ATCTTGTTCAATGCCGATCAAGGTCGACATCAA 0 AGCTGTTCATGCGCCGACATCAA 1 AGCTTTTCATCAATGGCCATCAAGCGCGATCAA 2 ATCTTGCAATGCCGATCAAGAGATCAA 3 ATCTTGATCAAGATCCAGATCAAGATCAA这是我得到的一些行@perreal0,2,1,0,1,1,1,1是我的是的,我得到了同样的结果。我只想知道如果它找到相似的0,1不匹配序列,1,2不匹配序列,2和3不匹配序列,3@perrealatcttgttcaatgcgccgatcaaggtcgaatcaa atcttgttcaatgccaatcgactcgaatcaa atcgaatcaa 3 agctgtctctctcaatcgaatcgaatcgaatcaa 2我与输出混淆了,这里是f第一个是原始序列,数字3有1个不匹配,2有2个不匹配。我想要的是它应该打印类似的序列(比如0)和1,2,3个不匹配序列@Ashwini Chaudhary