《生物信息学》FASTA文件处理——Python

最近帮朋友做有关生物信息学的编程题,由于第一次接触有关FASTA文件的有关操作,用了不少时间才实现了如下功能:
  • FASTA文件的读取
  • 打印J列和K列对应范围的碱基
  • 统计DNA中的碱基数量

操作步骤说明:输入data.xlsx内存在的基因名称,即可打印出同行J列与K列对应的基因片段,以及对应的剪切变体(B列名称),同时可以统计任意长度基因内的ATGC碱基数量。

#Demo.py
#将Demo.python与chromFa文件夹及data.xlsx放在同一目录下
#=====================================================================
#此函数用于打印J,K列指示的碱基序列
def counting(str_in , str_1 , str_2):
    f = open(str_in)
    ls = []
    for line in f:
        if not line.startswith('>'):
            ls.append(line.replace('\n', ''))  # 去掉行尾的换行符
    f.close()
    _str = ''
    for i in range(0, len(ls)):
        _str += ls[i]#_str是fa文件的完整碱基序列
    arr_1 = getRange(str_1)
    arr_2 = getRange(str_2)

    for i in range(len(arr_1)):
        #print((len(_str),arr_1[i],arr_2[i]))
        print("第" + str(i + 1) + "个碱基序列是")
        print(_str[arr_1[i]:arr_2[i]])
        print("\n其中一共有:")
        countATGC(_str[arr_1[i]:arr_2[i]])


#=====================================================================
#此函数用于统计碱基序列中的A,T,G,C个数
def countATGC(str_in):
    A = C = T = G = 0
    A += str_in.count('A')
    C += str_in.count('C')
    T += str_in.count('T')
    G += str_in.count('G')
    print('A:',A,'\n','C:',C,'\n','T:',T,'\n','G:',G,'\n')


#=====================================================================
#此函数用于去掉J,K列中的‘,’并转换成整型数组

def getRange(str_in):
    arr = str_in.split(',')
    arr = [int(val) for val in arr[0:-1]]
    return arr


#=====================================================================
import xlrd

FileContactList = "data.xlsx"
FileName = FileContactList

while True:
    KeyStr = input("请输入要搜索的基因名称: ")
    FileObj = xlrd.open_workbook(FileName)
    sheet = FileObj.sheets()[0]  # 获取第一个工作表
    row_count = sheet.nrows  # 行数
    col_count = sheet.ncols  # 列数    # 搜索关键字符串
    i = 1
    for element in range(row_count):
        if KeyStr.lower() in (str(sheet.row_values(element))).lower():
#从Excel表格中提取出来的数据头部有b',尾部有',原因未知
            str_1 = str(sheet.cell(element, 9).value.encode('utf-8')).lstrip('b\'').rstrip('\'')
            str_2 = str(sheet.cell(element, 10).value.encode('utf-8')).lstrip('b\'').rstrip('\'')
            str_Path = "./chromFa/" + str(sheet.cell(element, 2).value.encode('utf-8')).lstrip('b\'').rstrip(
                '\'') + ".fa"
            #print(str_Path)
            #print(str_1)
            #print(str_2)
            print("==>第" + str(i) + "个" + KeyStr)
            print("剪切变体是:")
            print(str(sheet.cell(element,2).value.encode('utf-8')).lstrip('b\'').rstrip('\''))
            counting(str_Path,str_1,str_2)
            i += 1
#=====================================================================

运行结果示例:
Example Of Hackson's Demo
代码及材料链接:
https://github.com/suplex123/FASTA-Analysis

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值