国产aaaa级全身裸体精油片_337p人体粉嫩久久久红粉影视_一区中文字幕在线观看_国产亚洲精品一区二区_欧美裸体男粗大1609_午夜亚洲激情电影av_黄色小说入口_日本精品久久久久中文字幕_少妇思春三a级_亚洲视频自拍偷拍

首頁 > 化工知識 > 教程:Python拆分基因篩選數(shù)據(jù)

教程:Python拆分基因篩選數(shù)據(jù)

時間:2020-08-30 來源:編輯之譚 瀏覽:

在科研過程中,我們通常要對大量實驗數(shù)據(jù)文件進行拆分、拼接等操作,例如電池充放電循環(huán)、原位XRD數(shù)據(jù)等等。今天,譚編給大家分享利用Python編程對基因篩選數(shù)據(jù)文件進行拆分的編程教程。

 

前一段時間,一位本校生科院的同事尋求幫助:怎樣將一個數(shù)據(jù)量很大的基因篩選數(shù)據(jù)文件拆分成單個的txt文本文件?

這些拆分的結(jié)果文件可能有成千上萬個,采用Excel、Editplus(或Notepad)軟件手動拆分,工作量非常大,也容易出錯,因此手動操作已不現(xiàn)實,利用簡單的python編程可以分分鐘解決大問題!

 

1 程序功能介紹

1.1 功能要求

(1)將基因no_ex.cds.align.txt統(tǒng)計基因數(shù)、長度,并拆分為單獨的TXT;

(2)TXT結(jié)果文件中第一行要填入基因數(shù)、長度,第二行以后抄寫基因序列,并保留原基因序列數(shù)據(jù)(序列對齊,不能錯位);

(3)每個結(jié)果TXT文件按照基因編號命名;

(4)同時處理篩選配置文件,修改其中與基因編號一致的*.aa、*.trees調(diào)用文件名和outfile文件名參數(shù),最終同步生成與基因編號同名的codeml.ctl文件。

為了適應(yīng)不同的基因篩選實驗數(shù)據(jù)的處理,python程序運行時,需要一個輸入框,輸入原數(shù)據(jù)文件名(例如no_ex.cds.align.txt),確定后,python程序就可以執(zhí)行自動拆分操作了。

 

同時,為了每一次執(zhí)行程序不會覆蓋上一次執(zhí)行操作的結(jié)果,python程序按照運行開始時間創(chuàng)建一個帶時間信息的文件夾(例如:Gene20191122142文件夾),并將所有拆分.txt文件和同名配置文件.ctl輸出保存在該文件夾下。

 

1.2數(shù)據(jù)文件準(zhǔn)備

將原數(shù)據(jù)文件(如no_ex.cds.align.txt和配置文件(如codeml.ctl)保存在程序目錄下。

為了運行時方便收入文件名,可以將no_ex.cds.align.txt改為簡單文件名,如“g.txt”,本程序調(diào)試中譚編用的文件名為“genes.txt”,大家可以隨意改為方便輸入和記憶的文件名。

 

codeml.ctl是配置文件,不要更改文件名,程序?qū)⒆詣幽J打開“codeml.ctl”配置文件,讀取所有配置參數(shù),修改其中的前3行參數(shù)中的.aa、.trees文件名以及outfile參數(shù),并在程序拆分一段基因序列數(shù)據(jù)后,同名輸出配置文件。codeml.ctl配置文件頭部信息如下圖所示。

 

 

2程序設(shè)計

2.1程序環(huán)境

采用python3.6運行環(huán)境和pycharm編輯器編寫程序。需要導(dǎo)入re、datetime庫。

 

2.2編程過程

2.2.1配置與導(dǎo)包

在pycharm中新建align.py文件,并敲入以下代碼:

1#-*-coding:utf-8-*-
2
3importre
4importdatetime

第一行是申明編碼為utf-8,第3~4行是導(dǎo)入re和datetime庫。

2.2.2自定義函數(shù)
(1)文件夾創(chuàng)建函數(shù)

在拆分輸出結(jié)果數(shù)據(jù)過程中,需要創(chuàng)建文件夾。

(左右滑動查看全部代碼,下同)

 1defmkdir(path):
 2#引入模塊
 3importos
 4#去除首位空格
 5path=path.strip()
 6#去除尾部符號
 7path=path.rstrip("")
 8#判斷路徑是否存在
 9isExists=os.path.exists(path)
10#判斷結(jié)果
11ifnotisExists:
12#如果不存在則創(chuàng)建目錄
13#創(chuàng)建目錄操作函數(shù)
14os.makedirs(path)
15returnTrue
16else:
17#如果目錄存在則不創(chuàng)建,并提示目錄已存在
18returnFalse

(2)輸出文件函數(shù)

這里有兩種輸出方式:一是直接將所有內(nèi)容保存到文件(savetotxt());二是將數(shù)據(jù)逐行追加到文件(appendtofile())。前者用于輸出codeml.ctl文件(只是修改前3行參數(shù),然后整體輸出),后者是逐行讀取原始數(shù)據(jù),通過統(tǒng)計與分析后,將結(jié)果逐行追加到已建立的txt文件末尾。

 1defsavetotxt(txtnm,txt,savepath):
 2path=savepath+'/'+txtnm
 3print(path)
 4try:
 5#mkdir(savepath)
 6withopen(path,'w+',encoding='gbk')asftxt:
 7ftxt.writelines(txt)
 8print(path+'waswrotesuccessfully!')
 9except:
10pass
11print(path+'wasnotwrote!')
12
13
14defappendtofile(txtnm,txt,savepath):
15path=savepath+'/'+txtnm
16try:
17mkdir(savepath)
18withopen(path,'a+',encoding='gbk')asftxt:
19ftxt.writelines(txt)
20print(path+'waswrotesuccessfully!')
21except:
22pass
23print(path+'wasnotwrote!')
上述兩個自定義函數(shù)中,都包含txtnm、txt、savepath三個參數(shù),分別表示輸出txt文件名、輸出文本內(nèi)容、保存路徑。
兩個函數(shù)結(jié)果基本相似,涉及3個知識點:
(a)保存文件路徑字符串拼接
 
2path=savepath+'/'+txtnm

例如savepath為“Gene2019111007”,txtnm是基因編號命名的文件名“OG10925.txt”,這兩者之間用“/”拼接,結(jié)果path的字符串如下:

Gene2019111007/OG10925.txt

(b)輸出保存文件

6withopen(path,'w+',encoding='gbk')asftxt:
7 ftxt.writelines(txt)

with open() as f1:這一句代碼是打開一個文件,這種方式打開不用擔(dān)心結(jié)束前,打開的文件是否已關(guān)閉,即免輸入“f1.close()”,這個我們往往會忘記輸入close()。有了with open()就不用擔(dān)心這個了。

with open()中“w+”和“a+”分別是可寫(write)和可加(append)兩種寫文件方式。下一行代碼writelines(txt)是將txt變量中的字符串輸出。

(c)糾錯代碼
try:...except:...語法是嘗試我們的程序,如果遇到意外(可能是bug也可能是原數(shù)據(jù)文件中的編碼問題)自動跳過try執(zhí)行except下的代碼,讓程序pass掉,否則程序如果遇到異常會終止運行。在開始編程過程中,可以不加try:...except:...,目的是遭遇bug,調(diào)試排除編程過程中因算法錯誤或輸入錯誤導(dǎo)致的bug。
1try:
2#正常執(zhí)行的代碼段
3except:
4pass
5#異常執(zhí)行的代碼段

2.2.3 主程序

在編寫主程序之前,一定要將所有用到的自定義函數(shù)編寫在主程序入口代碼之前,否則調(diào)用函數(shù)會出錯。
下面是主程序入口的代碼:
 1if__name__=='__main__':#程序的主入口
 2print('''
 3███████╗██████╗██╗██╗████████╗████████╗██╗██╗████████╗███████╗
 4██╔════╝██╔══██╗██║██║╚══██╔══╝╚══██╔══╝╚██╗██╔╝╚══██╔══╝██╔════╝
 5███████╗██████╔╝██║██║██║█████╗██║╚███╔╝██║███████╗
 6╚════██║██╔═══╝██║██║██║╚════╝██║██╔██╗██║╚════██║
 7███████║██║███████╗██║██║██║██╔╝██╗██║███████║
 8╚══════╝╚═╝╚══════╝╚═╝╚═╝╚═╝╚═╝╚═╝╚═╝╚══════╝
 9
10功能介紹:將基因no_ex.cds.align.txt統(tǒng)計基因數(shù)、長度,并拆分為單獨的TXT文件
111.準(zhǔn)備:將原數(shù)據(jù)文件(如no_ex.cds.align.txt和配置文件(如codeml.ctl)保存
12在程序目錄下。
132.運行:在python或pycharm中運行本程序,輸入原數(shù)據(jù)文件名,確定。
143.說明:數(shù)據(jù)處理結(jié)果自動保存在新建文件夾(如Gene20191121137)下。
15
16''')
17datafile=input('''請輸入align文件名(包括擴展名.txt):
18''')

(1)主程序入口

第一行是固定格式,照抄就行,不能有錯,name和main前后都是兩個下劃線,不能缺少和錯誤。特別注意:我們在輸入程序代碼時,有時候因為中文輸入狀態(tài)輸入了中文冒號、中文逗號、中文引號、中文括號等等,肯定會出錯!

(2)條件if語法

1#注意ifelse和其他模塊(for循環(huán)、def定義函數(shù)等等)一樣在行末以英文冒號結(jié)尾
2ifx==0:#判斷兩者是否相等
3ifx!=0:#不等于
4ifx>0:#大于0,x>=0是大于等于0
5if(line.find(">tmp")!=-1):#也可以將條件用括號括起來
6#這里是if滿足是的代碼,注意tab縮進
7else:
8#這里是否則的代碼,注意tab縮進
9#退格到行首,不縮進,表示退出if else的模塊,進入下一段順序結(jié)構(gòu)。

(3)輸入框代碼

在程序執(zhí)行前,往往需要用戶輸入一些參數(shù),例如本程序需要輸入原始數(shù)據(jù)txt文件,我們需要對該文件進行操作。當(dāng)然要確保輸入的文件在程序文件當(dāng)期文件夾下存在(事先準(zhǔn)備好)。我們將input()獲得的用戶輸入文本內(nèi)容賦值給datafile變量,賦值語法是一個等號。

117datafile=input('''請輸入align文件名(包括擴展名.txt):
218''')

(a)input(str)函數(shù)

input(str)函數(shù)讓用戶輸入一個字符串,參數(shù)str是一個提示語,例如“請輸入文件名:”

(b)python中的幾種引號

python編程中有三種引號:單引號、雙引號、三引號(三個單引號)。這種安排非常巧妙,我們在處理文本時,經(jīng)常遇到處理的文本中也包含英文的雙引號,為了避免語法錯誤,python讓我們靈活避免引號的重復(fù)、套接錯誤。也就是說,如果字符串中有雙引號,我們在用該字符串時,需要在兩端用單引號;如果字符串中已經(jīng)有單引號,我們就用雙引號。

對于三引號的用法,想必大家已經(jīng)從上面的代碼中看出端倪了!三引號所包含的字符串可以為段落(換行符),也就是可以換行。例如前面主程序入口,我們用到了換行的段落。

大家肯定會好奇主程序print輸出的屏幕提示中,SPLIT-TXTs是怎么弄的,在下面這個網(wǎng)址,輸入你想要的文本,即可生成asc藝術(shù)字。

http://patorjk.com/software/taag

(4)主程序中的部分代碼

主程序中input()輸入獲得datafile數(shù)據(jù)文件名后,讀取系統(tǒng)時間、拼接folder文件夾字符串、mkdir創(chuàng)建文件夾、讀取codeml.ctl配置文件的全部內(nèi)容,代碼如下:

 1start_time=datetime.datetime.now()
 2
 3now=datetime.datetime.now()
 4folder='Gene{}{}{}{}{}'.format(now.year,now.month,now.day,now.hour,now.minute)
 5mkdir(folder)#以“Gene201911012114”為輸出文件夾
 6
 7#讀取codeml.ctl文件
 8withopen("codeml.ctl","r")asf_codeml:
 9codeml_content=f_codeml.read()
10
11#---------處理align數(shù)據(jù)文件---開始----------------------

限于篇幅,后續(xù)拆分基因原始數(shù)據(jù)的核心代碼暫時省略。

版權(quán):如無特殊注明,文章轉(zhuǎn)載自網(wǎng)絡(luò),侵權(quán)請聯(lián)系cnmhg168#163.com刪除!文件均為網(wǎng)友上傳,僅供研究和學(xué)習(xí)使用,務(wù)必24小時內(nèi)刪除。
相關(guān)推薦