筆記 python對FASTA檔案的處理

2021-08-19 11:20:43 字數 3313 閱讀 8022

這學期選了生信的選修課—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 這...