题目要求是要从一个fasta文件中统计出每条序列的长度分布,并作图。
代码如下:
import os
import getpass
import matplotlib.pyplot as plt
usr = getpass.getuser()
os.chdir('c:/Users/' + usr + '/Desktop')
seq_len = {}
# 把fasta文件全部读取做成字典,键是带‘>’的那一行,值是序列
def readfasta(filename):
fa = open(filename, 'r')
res = {}
ID = ''
for line in fa:
if line.startswith('>'):
ID = line.strip('\n')
res[ID] = ''
else:
res[ID] += line.strip('\n')
return res
seq = readfasta('Test1.fa')
# 做成另外一个字典字典,键是带‘>’的那一行,值是序列长度:
for k,v in seq.items():
seq_len[k] = len(v)
seq_len_sort = sorted(seq_len.items(), key=lambda x: x[1])
seq_len_sort = dict(seq_len_sort)
location = {}
lenth_a = 0
lenth_b = 500
bar = 500
# 通过循环的方式找到每个窗口区间内的长度分布,这里选的窗口是500
# 这里的4500是排序之后根据最大值看出来的
while lenth_b &