這學期選了生信的選修課—perl/python在生物資訊學中的應用
把結課作業的**整理出來主要是python對fasta檔案的讀取和資料處理
fasta檔案資料處理
fasta檔案讀取:
只含乙個基因序列
將fasta檔案的基因序列讀取到乙個列表中,列表中的每個元素為每一行基因序列構成的字串
f=open('/home/miaoyr/perl_practice/test1_file/dtnbp1.fasta')
ls=for line in f:
if not line.startswith('>'):
f.close()
含有多個序列資訊
將資料儲存在字典中,鍵為基因名,值為基因序列
f=open('/home/miaoyr/perl_practice/test4_file/3.fasta_seq.txt')
seq={}
for line in f:
if line.startswith('>'):
name=line.replace('>','').split()[0]
seq[name]=''
else:
seq[name]+=line.replace('\n','').strip()
f.close()
鹼基數目和序列長度統計:
上一步將基因序列寫入列表,為了使用str.count()函式(使用物件為字串)直接計算,將全部基因序列合併為乙個字串_str
a=c=t=g=0
_str=''
for i in range(0,len(ls)):
_str+=ls[i]
print _str
a+=_str.count('a')
c+=_str.count('c')
t+=_str.count('t')
g+=_str.count('g')
print 'a:',a,'\n','c:',c,'\n','t:',t,'\n','g:',g,'\n'
輸出互補序列:
f=open('/home/miaoyr/perl_practice/test4_file/3.fasta_seq.txt')
seq={}
complement=
for line in f:
if line.startswith('>'):
name=line
seq[name]=''
else:
line=line.lstrip()
for i in line:
seq[name]+=complement[i] #將互補序列儲存到字典的值中
f.close()
_str=
l=open('4-5-output.txt','w')
for key in seq.keys(): #按fasta檔案格式輸出
l.writelines(_str)
l.close()
這個程式好像沒有解決反向輸出的問題。。
參考:seq[name][:-1] 沒有試過不知道行不行orz
這裡以本題為例:在基因的資訊a檔案中,找出b檔案中存在的基因名的資訊
檔案b中只包含基因名,這裡講檔案b按行讀取,儲存在乙個列表中,列表中的每乙個元素對應乙個基因名
import os
get_name=
for _name in open('/home/miaoyr/perl_practice/test2_file/2.1name.txt'):
print get_name
f=open('2-1-output.txt','w')
for name in get_name:
m_name="'$3~/^"+name+"/ '"
cmd="'awk' %s '/home/miaoyr/perl_practice/test2_file/2.1predicted_targets_info.txt'" % m_name
output=os.popen(cmd).readlines()
f.writelines(output)
f.close()
由於當時腦子抽了,想用shell語言(程式都是在linux上編寫的)python的互動來寫。。。
用了os.popen()函式實現和shell語言的awk命令互動,多此一舉了。。
變數傳遞的時候遇到了很大的問題,最後用字串解決的。
實現shell和python互動可用的函式主要由 os.popen()和os.system(),二者有一些區別。
python比較簡單的方法思路:
將檔案a按行讀取,用split()函式分割。
遍歷b檔案中的基因名,通過pattern正規表示式,在檔案a讀取的行中查詢符合條件的基因資訊並輸出。
問題:程式執行速度較慢,我也想不出更好的辦法了qaq
以本題為例:同樣是
在基因的資訊a檔案中,找出b檔案中存在的基因名的資訊,這裡用python直接處理。
get_id=
for _id in open('/home/miaoyr/perl_practice/test2_file/2.2gene_id'):
info={} #定義乙個字典,鍵為基因名,值用於儲存基因資訊
for l in open('/home/miaoyr/perl_practice/test2_file/2.2gene_de_info'):
ls=l.replace('\n','').split('\t') #檔案a中含有多種資訊,用split()分開儲存
name=ls[0]
info[name]=ls[1]
for _id in get_id: #遍歷檔案b中的基因名找到匹配的鍵
if _id==name:
print name,'\n',info[name]
簡單的資料篩選可直接用linux命令實現
常用的包括awkwc grep等
awk真的。。超級好用
以上題目對python的應用主要表現在
檔案的讀取和寫入
輸出格式化
一些庫和函式的簡單應用
我可能還沒有入門orz
使用python讀取和分析fasta檔案
在生物資訊學中,fasta格式 又稱為pearson格式 是一種基於文字的 用於表示核苷酸序列或氨基酸序列的格式。fasta檔案以序列標識和序列作為乙個基本單元,每個基本單元分為兩部分 序列標記和序列本身。第一行以 開頭,後面緊跟序列標記 從第二行開始,直到下乙個標記行 開頭行 出現,或檔案末尾,這...
字典樹 336 回文對 PYTHON
本身就是回文串單詞 palidstr 翻轉單詞記錄位置 rev words 結果 res for idx,word in enumerate words rev words word 1 idx 利用列表推導式的形式進行逆置,同時利用賦值的方法規避掉 的元素 為了防止陣列裡有空字串 if word ...
python學習筆記3 python讀寫檔案
一 檔案的開啟模式 1 開啟檔案 1 f open d a.txt w 第乙個引數是檔案的路徑,如果只寫檔案的名字,預設是在當前執行目錄下的檔案 第二個引數是檔案的開啟模式 這種方式開啟檔案,在使用完了之後一定要記得,關閉檔案 f.close 2 with open d a.txt w as f 這...