根據(jù)漢明距離拆barcode

寫一個(gè)腳本寓盗,完成以下任務(wù):
有一個(gè)文本文件A如下:barcode.fa灌砖,其中包含了若干長度8bp至11bp的DNA序列璧函。

>bc1_0
GTTTGTTT
>bc1_1
ACCGTGTTT
>bc1_2
GATAGTGTTT
>bc1_3
TGAGGCGGTTT
>bc1_4
GATCGTTT
>bc1_5
ATCACGTTT
>bc1_6
GATGTAGTTT
>bc1_7
TGACACAGTTT
>bc1_8
CTTTCTTT
>bc1_9
AGCCTCTTT
>bc1_10
GACGGGCTTT

另有一個(gè)fastq文件B,fastq文件不做介紹了基显。
要求對此fastq文件進(jìn)行處理蘸吓,輸出滿足以下條件的序列:
1)序列的前8bp-11bp與前述文本文件A中的DNA序列hamming distance不大于2;
2)能夠唯一匹配到文本文件A中的某一條DNA序列
(例如撩幽,如果fastq中某條序列的前8bp-11bp在文本文件中沒有完全匹配的DNA序列库继,而在A文件中有兩條或以上的DNA序列的hamming distance為1,則拋棄該序列)窜醉。
注意:
主要是在沒有0的情況下宪萄,多于1個(gè)barcode的hamming distance等于1,或者在沒有0和1的情況下榨惰,多于一個(gè)barcode的hamming distance等于2拜英,都是不應(yīng)該輸出的。
有多個(gè)barcode跟同一個(gè)read的hamming distance都在2以內(nèi)琅催,這個(gè)也分很多種情況居凶,比如,沒有barcode的distance是0藤抡,但是又1個(gè)barcode的distance 是1侠碧,n(n>1)個(gè)barcode的distance是2,這個(gè)時(shí)候最小的distance是1缠黍,且只跟1個(gè)barcode有這個(gè)最小值弄兜,那么就應(yīng)該輸出。另一個(gè)例子瓷式,如果沒有barcode的distance是0挨队,有2個(gè)barcode的distance是1,那就不該輸出蒿往。

計(jì)算hamming 距離
漢明距離是使用在數(shù)據(jù)傳輸差錯(cuò)控制編碼里面的,漢明距離是一個(gè)概念湿弦,它表示兩個(gè)(相同長度)字對應(yīng)位不同的數(shù)量瓤漏,我們以d(x,y)表示兩個(gè)字x,y之間的漢明距離。對兩個(gè)字符串進(jìn)行異或運(yùn)算颊埃,并統(tǒng)計(jì)結(jié)果為1的個(gè)數(shù)蔬充,那么這個(gè)數(shù)就是漢明距離。from 維基百科https://zh.wikipedia.org/wiki/%E6%B1%89%E6%98%8E%E8%B7%9D%E7%A6%BB
直接上代碼:

import gzip
from Bio import SeqIO
import itertools
# 定義函數(shù)計(jì)算hanming distance班利。
def hamming(str1, str2):
  return sum(itertools.imap(str.__ne__, str1, str2))
# 處理fasta文件饥漫,將id與seq存儲(chǔ)為dict
def deal_dna_file(a,):
    dna_dict = {}
    for record in SeqIO.parse(a,"fasta"):
        dna_dict[record.id] = record.seq
    return dna_dict

A_DNA_file = sys.argv[1]
B_fastq_file = gzip.open(sys.argv[2],"r")

# B_fastq_file = open(sys.argv[2],"r")
dna_dict = deal_dna_file(A_DNA_file)
# print dna_dict
# 遍歷fastq文件去處理每行序列
for record in SeqIO.parse(B_fastq_file, "fastq"):
    a = 0
    b = 0
    # 遍歷dict,去判斷hamming距離罗标,分0,1,2三種情況庸队,記錄距離為1积蜻,和2的次數(shù),根據(jù)次數(shù)去判斷彻消。
    for k,v in dna_dict.items():
        if a >1:
            break
        if hamming(v,record.seq[:len(v)]) == 0:
            print record.seq
        elif hamming(v,record.seq[:len(v)]) == 1:
            a +=1
        elif hamming(v,record.seq[:len(v)]) ==2:
            b +=1
    print a,b
    if a == 1 and b > 1: # one barcode distance is 1 and more than one barcode distance are 2
        print record.seq
    if a == 1 and b == 0: # only barcode distance is 1. 
        print record.seq
    if a == 0 and b == 1: # only barcode distance are 2.
        print record.seq

這樣就符合要求了竿拆,有bug請反饋。
生信學(xué)習(xí)者練習(xí)題宾尚;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丙笋,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子煌贴,更是在濱河造成了極大的恐慌御板,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牛郑,死亡現(xiàn)場離奇詭異怠肋,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)井濒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門灶似,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瑞你,你說我怎么就攤上這事酪惭。” “怎么了者甲?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵春感,是天一觀的道長。 經(jīng)常有香客問我虏缸,道長鲫懒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任刽辙,我火速辦了婚禮窥岩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宰缤。我一直安慰自己颂翼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布慨灭。 她就那樣靜靜地躺著朦乏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪氧骤。 梳的紋絲不亂的頭發(fā)上呻疹,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音筹陵,去河邊找鬼刽锤。 笑死镊尺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的姑蓝。 我是一名探鬼主播鹅心,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼纺荧!你這毒婦竟也來了旭愧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤宙暇,失蹤者是張志新(化名)和其女友劉穎输枯,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體占贫,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡桃熄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了型奥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞳收。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖厢汹,靈堂內(nèi)的尸體忽然破棺而出螟深,到底是詐尸還是另有隱情,我是刑警寧澤烫葬,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布界弧,位于F島的核電站,受9級(jí)特大地震影響搭综,放射性物質(zhì)發(fā)生泄漏垢箕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一兑巾、第九天 我趴在偏房一處隱蔽的房頂上張望条获。 院中可真熱鬧,春花似錦蒋歌、人聲如沸帅掘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至素标,卻和暖如春称诗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背头遭。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國打工寓免, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留癣诱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓袜香,卻偏偏與公主長得像撕予,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子蜈首,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容