美文网首页
python生物信息学数据管理

python生物信息学数据管理

作者: Dayueban | 来源:发表于2018-12-22 23:46 被阅读125次

分享的一些笔记都是我学习python生物信息学数据管理这本书后,练习习题后的答案,由于是学习的过程,代码可能写的比较蹩脚,希望得到大家的指正

今天学习的本书的第8章——数据排序

  1. 自测题8.1:编写一个程序,从文本文件中读取数据表(如下表所示),按第二列排序,将已经排好序的表的前三行写入新的文件
蛋白质 消光值
0.16 0.038
0.16 0.044
0.16 0.040
0.33 0.089
0.33 0.056
... ...
  • 首先将该表命名为'protein_concertration.csv'
  • 排序需要用到python的内置函数sortedoperator模块
  • 贴出代码如下
#!/usr/bin/python
#coding:utf-8

##导入正则表达式模块
import re
import os
from  operator import itemgetter


os.chdir("E:\\生信工具\\python\\python") ## set the working diectory
#from operator import itemgetter
input_file = open('protein_concertration.csv','r')
output_file = open('protein_concertration_sorted.csv','w')
table = [] ## create a empty matrix
header = input_file.readline() ## .readline()一次只读一列,这里是把表达先存储起来
for line in input_file:
    col = line.strip().split(',')
    col[1] = float(col[1]) ## 先将要排序的这一列的数字转换为浮点型
    table.append(col)
table_sorted = sorted(table, key = itemgetter(1)) ## itemgetter指定要排序的那一列
output_file.write(header + '\n')
n = 0
for row in table_sorted:
    if n < 3: ## 输出前三列,由于python索引从0开始,所以这里设置小于3,即索引0,1,2代表前三行
        row = [str(x) for x in row] ## 重新转为字符型
        output_file.write(','.join(row) + '\n')
        n = n + 1
    else:
        break
output_file.close()
  1. 8.2 按序列长度(由长至短)对多序列fasta文件排序。提示:首先要解析在第4章中学到的文件并创建列表的列表,每行包含三个要素(标题、序列、序列长度)。然后根据子列表的第3个元素对列表排序,最后将已经排序列表写入文件
  • 原文件如下,fasta序列
>FG4821B_Tag23502;barcodelabel=FG4821B;size=3260
CACGTAAGTTGCGAGCGTTGTTCGGAATTATTGGGCGTAAAGGGTATGTAGGCGGTTCTGCAAGTCTGGTGTGAAATGCCGGGGCTCAACCCCGGAACTGCGTTGGAAACTGCAGGACTTGAATCGCTGAGGGGCAGCCAGAATTCCAGGTGTAGGGGTGAAATCTGTAGATATCTGGAAGAATA
>M4734B_Tag23146;barcodelabel=M4734B;size=2827
CACGTAAGTTGCGAGCGTTGTTCGGAATTATTGGGCGTAAAGGGTATGTAGGCGGTTCTGCAAGTCTGGTGTGAAATGCCGGGGCTCAACCCCGGA
>M4246B_Tag21426;barcodelabel=M4246B;size=1661
CACGTAAGTTGCGAGCGTTGTTCGGAATTATTGGGCGTAAAGGGTATGTAGGCGGTTCTGCAAGTCTGGTGTGAAATGCCGGGGCTCAACCCCGGAACTGCGTTGGAAACTGCAGGACTTGAATCGCTGAGGGGCAGCCAGAATTCCAGGTGTAGGG
>G4987A_Tag22462;barcodelabel=G4987A;size=1649
TACGGAAGGTCCGGGCGTTATCCGGATTTATTGGGTTTAAAGGGAGCGTAGGCCGTCGTTTAAGCGTGTTGTGAAATGCCGCGGCTCAACCGTGGCACTGCAGC
  1. 先将fasta文件的header和对应的seq合并成一个列表,以','分隔
  2. 接着计算seq碱基的长度,用到len()函数
  3. 将seq长度变量添加到之前列表的后面,构成三个元素的列表,<font color=red size=2 >贴出代码如下</font>
#!/usr/bin/python
#coding:utf-8
###从GSE30169_series_matrix.txt文件中制作单纯matrix文件
##导入正则表达式模块
import re
import os
from  operator import itemgetter

os.chdir("E:\\生信工具\\python\\python")##set the working directory
#from operator import itemgetter
input_file = open('test20171228.fa','r') 
output_file = open('fasta_length_matrix.txt','w')
seq = ''
#header = input_file.readline()
for line in input_file:
    line = line.strip()
    if line[0:1] == '>':
        header = line[1:]
        #table.append(str(header))
    else:
        seq = seq + line
        length = len(seq) ## 计算序列长度
        output_file.write(str(header) + ',' + str(seq) + ',' + str(length) + '\n')
        #table.append(  str(seq) + ',' + str(length) + '\n')
input_file.close()
output_file.close()

f2 = open('fasta_length_matrix.txt','r')
f3 = open('fasta_length_sort.txt','w')
table = []
for line in f2:
    col = line.split(',')
    col[2] = float(col[2])
    table.append(col)
table_sorted = sorted(table, key = itemgetter(2),reverse=True) ## 根据序列长度排序,反向排序
for row in table_sorted:
        row = [str(x) for x in row]
        f3.write(','.join(row) + '\n')

f2.close()
f3.close()
python八卦图

注:排序需要用到python的内置函数sortedoperator模块

相关文章

网友评论

      本文标题:python生物信息学数据管理

      本文链接:https://www.haomeiwen.com/subject/ksqgkqtx.html