批量修改基因文件里的基因名

前面提到了可以根據(jù)樹的拓?fù)浣Y(jié)構(gòu)生成一系列與物種樹一致的基因樹;但其實也可以用同一個物種樹挽绩,然后把OG基因里的基因名替換成物種名。
同樣也需要一個genelist文件(這個文件生成參考前面的)脖阵,以及一個輸入的OG基因文件目錄拇派。

#!/usr/bin/python
# -*- coding: utf-8 -*-
# conda activate python3
"""
    作者:徐詩芬
    內(nèi)容:1. 打開single_copy_gene_list.txt文件,讀取第一行生成一個species list途戒;
         2. 讀取剩下的行坑傅,讀取OG的id以及生成該id的基因列表gene list,
         并且將species和gene列表并列起來生成一個字典;
         3.根據(jù)OG的id打開Single_copy_gene里的id文件喷斋,讀取gene名唁毒,循環(huán)gene list,根據(jù)基因名替換成物種星爪,
         創(chuàng)建一個與OG_id相同的文件直接寫入替換好的序列文件浆西,用writelines可以直接寫一個列表。

    日期:2022.1.11
"""
import sys
import os
import subprocess
import re
from itertools import islice


def usage():
    print('Usage: python change_gene.py [single_copy_gene_list.txt] [Input_dir] [Output_dir]')

def main():

    name_list = open('single_copy_gene_list.txt', 'rt')  # sys.argv[1]
    input_dir = 'data\Single_copy_gene' #sys.argv[2]  # 輸入文件夾顽腾,Single_copy_gene,
    out_dir = 'data\Single_copy_gene_species' #sys.argv[3]   # 運行前先創(chuàng)建一個近零,可以命名為Single_copy_gene_species
    # subprocess.call(['mkdir', out_dir])  # linux系統(tǒng)自動創(chuàng)建output文件夾

    species_list = []
    name_list.seek(0, 0)                   # 加一個指針文件,運行完下面的第一行抄肖,后面的readline就可以直接從下一行開始
    for head in islice(name_list, 0, 1):   # 輸出第一行title
    # head = name_list.readline()           # 也可以這樣輸出title
        species_list = head.strip().split("\t")[1:]

    # line = name_list.readline()
    for line in name_list:                          # 由于上面指定了文件開始位置久信,這里其實就是跳過第一行讀取剩下的行
        OG_id = line.strip().split("\t")[0]         # 讀取OG的id
        gene_list = line.strip().split("\t")[1:]    # 讀取該行所包含的所有物種基因名
        pattern_dict = dict(zip(gene_list, species_list))  # 生成物種與基因名一一對應(yīng)的字典
        OG_list = os.listdir(input_dir)              # 生成一個輸入文件目錄里存在的文件列表
        infile = f'{OG_id}.fa.mafft.fa'
        if infile in OG_list:                        # 判斷infile是否在input_dir里面
            fas_file = os.path.join(input_dir, infile)
            pref = infile.split('.')[0]
            with open(fas_file, 'r') as f:
                new_lines = []
                for fa_line in f:
                    if fa_line.startswith('>'):
                        name = fa_line.strip()[1:]
                        if name in list(pattern_dict.keys()):
                            new_line = re.sub(name, pattern_dict[name], fa_line)  # 把基因名替換成該行里面的物種名
                            new_lines.append(new_line)
                    else:
                        new_lines.append(fa_line)

                with open(f'{out_dir}/{pref}.mafft.fa', 'w') as out:
                    out.writelines(new_lines)


try:
    main()
except IndexError:
    usage()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市漓摩,隨后出現(xiàn)的幾起案子裙士,更是在濱河造成了極大的恐慌,老刑警劉巖幌甘,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件潮售,死亡現(xiàn)場離奇詭異痊项,居然都是意外死亡,警方通過查閱死者的電腦和手機酥诽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門鞍泉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肮帐,你說我怎么就攤上這事咖驮。” “怎么了训枢?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵托修,是天一觀的道長。 經(jīng)常有香客問我恒界,道長睦刃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任十酣,我火速辦了婚禮涩拙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘耸采。我一直安慰自己兴泥,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布虾宇。 她就那樣靜靜地躺著搓彻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嘱朽。 梳的紋絲不亂的頭發(fā)上旭贬,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音搪泳,去河邊找鬼骑篙。 笑死,一個胖子當(dāng)著我的面吹牛森书,可吹牛的內(nèi)容都是我干的靶端。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼凛膏,長吁一口氣:“原來是場噩夢啊……” “哼杨名!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起猖毫,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤台谍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后吁断,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趁蕊,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡坞生,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了掷伙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片是己。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖任柜,靈堂內(nèi)的尸體忽然破棺而出卒废,到底是詐尸還是另有隱情,我是刑警寧澤宙地,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布摔认,位于F島的核電站,受9級特大地震影響宅粥,放射性物質(zhì)發(fā)生泄漏参袱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一秽梅、第九天 我趴在偏房一處隱蔽的房頂上張望蓖柔。 院中可真熱鬧,春花似錦风纠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至潜索,卻和暖如春臭增,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背竹习。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工誊抛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人整陌。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓拗窃,卻偏偏與公主長得像,于是被迫代替她去往敵國和親泌辫。 傳聞我的和親對象是個殘疾皇子随夸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

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