有一個文本文件,內(nèi)容包括序列id和其序列內(nèi)容,以>開頭的行表示id,其后面的幾行表示序列內(nèi)容,請教該如何過濾掉長度小于l的序列。部分文件如下:
>NNH52_c0_seq1
ATGAGCATTGCCTTACCTCCTCTAAATCATACATAATATTGCAGGCTCTCCCTTTTTACC
ACCTCGCCAATTACCTTTACAAAGAGGATTAAGAATTTAATCCTGAGCAACCACCTAGTT
TTATTAATGCACATTGACATAGCAGTATCTTTTTGCTCATAGAACAAGTTCAGATATTAT
TTGGCCTTTGATAA
>NNH262_c0_seq1
AATTCTCACGCCTCCAGTGAACCTTATAGTATTAATGACAGAGTTACCACCTCCGACAAA
GGAACGACGTTTCAAACCCTGCGTCTCTCTACCTTGTCAGGCGAGTAGGCGGAACGACTC
TTGGACATCCCACCTGTGATCACCG
>NNH774_c0_seq1
GGTAGCCCCGCCGTGGATGCGCCGCCATCTCTTCGTCTGTGTCTCCTTCCCTTCTCTCTC
TCTCTCTCCCCACTTGAAACTGGGTTGGCCCAGAAATCTTCCGTTCCGCTGAAAAGCTCC
TCTCTCTCTCTTCTCTCTCTCTCTCTTTCTCT
AGGCAG
>NNH4124_c0_seq1
ATGATATCCTTCGCCTACAACCATCAGTACCAGCAGATCGCCGCTGCAGGAGGGTACCCA
CTG
現(xiàn)在文件很大所以打算讀一條序列處理一條序列,如果全部讀入字典的話太占內(nèi)存了,我自己寫了個,但是感覺有點啰嗦,請教該如何處理,謝謝!
附上自己代碼吧。。
def rmShort(in_file, out_file, length):
cunt = defaultdict(str)
with open(in_file) as f_in, open(out_file, 'w') as f_out:
for line in f_in:
if line.startswith('>'):
try: # 在讀取后一條序列的時候處理前一條序列,所以剛剛讀取第一行的時候會報錯
seq = cunt.pop(id_)
if len(seq) > length:
f_out.write(id_)
f_out.write(seq)
except:
pass
finally:
id_ = line
else:
cunt[id_] += line
for seq_id, seq in cunt.items(): # 對于最后一行,無法讀取其后一行時處理它,故拿出來專門處理
if len(seq) > length:
f_out.write(seq_id)
f_out.write(seq)做生信的吧? 何必重復(fù)造輪子
from Bio import SeqIO
input_seq_iterator = SeqIO.parse("test.fasta", "fasta")
long_seq_iterator = (record for record in input_seq_iterator if len(record.seq) > 1)
SeqIO.write(long_seq_iterator, "long_seqs.fasta", "fasta")
def fasta_parser(handle):
# 跳過開頭可能的注釋, 空格之類內(nèi)容
while True:
line = handle.readline()
if not line:
return # 處理文件過早結(jié)束或者為空的情形
if line.startswith(">"):
break
while True:
if not line.startswith(">"):
raise ValueError(
"Tags in Fasta files should start with '>' character")
tag = line.strip()
seqs = ""
line = handle.readline()
# 處理換行序列
while True:
if not line:
break
if line.startswith(">"):
break
seqs += line.strip() # 拼接
line = handle.readline()
# 去除序列中可能的空格及\r
yield tag, seqs.replace(" ", "").replace("\r", "")
if not line:
return # 文件讀完, 停止迭代
with open("test.txt", "r") as fh:
for i in fasta_parser(fh):
if len(i[1]) > 10:
print('\n'.join(i))
def read_custom_file(in_file):
with open(in_file, 'r') as f:
seq = ''
tag = False
while True:
pos_previous = f.tell()
line = f.readline()
if not line:
yield seq
break
else:
if line.startswith('>') and tag:
if len('seq') < 10:
# add your custom code here
pass
else:
yield seq
seq = ''
f.seek(pos_previous)
tag = False
elif line.startswith('>'):
tag = True
seq += line
else:
seq += line
for line in read_custom_file('sample.txt'):
print(line)北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓領(lǐng)域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務(wù)負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。