美文网首页
[py3]使用接口下载jasper 中多个motif

[py3]使用接口下载jasper 中多个motif

作者: caokai001 | 来源:发表于2019-08-08 17:53 被阅读0次

    使用Jasper下载多个motif 脚本

    # 两个文档链接
    #1.http://jaspar.genereg.net/api/overview
    #2.http://jaspar.genereg.net/api/clients
    
    import coreapi
    import requests
    import os
    
    # Initialize a client & load the schema document
    client = coreapi.Client()
    schema = client.get("http://jaspar.genereg.net/api/v1/docs")
     
    # Interact with the API endpoint
    action = ["matrix", "list"]
    
    def modify_params(name='FOXA1',tax_id="9606"):
       
        '''
        主要是修改params 参数,用于api查询.主要参数如下:
        
        name  :   TF name
        tax_id:   specise
        
        '''
        params = {
        "collection": 'CORE',
        "name": name,
        "tax_group": 'vertebrates',
        "tax_id": tax_id,  #物种
        "version": 'latest',
        "release": '2018',
    }
        return params
    
    def download_svg(url,result):
        '''
        下载motif log 图片
        
        '''
        
        file_name=result["results"][0]['name']+"_"+result["results"][0]['url'].split("/")[-2]
    
        print(url)
        try:
            r=requests.get(url)
            r.raise_for_status()
            with open(file_name+".svg",'wb') as f:  # 二进制文件
                f.write(r.content)
        except:
            raise "error exit !"
    
    
    
         
    def modify_matrix_format(matrix_raw_url,fmt="jaspar"):
        '''
        修改matrix_raw_url ,添加format.默认是jaspar.支持很多格式,
        详见:http://jaspar.genereg.net/api/overview
        available data fromats are; json, jsonp, api, yaml, jaspar, transfac, pfm
        
        '''
        
        matrix_url=matrix_raw_url+"?format={}".format(fmt)
        return matrix_url       
        
    
        
    def download_matrix(url,file_name,fmt):
        '''
        下载特定格式的matrix,如jasper 
        
        '''
    
        
        try:
            r=requests.get(url)
            r.raise_for_status()
            with open(file_name+"_matrix."+fmt,'w') as f:  # 二进制文件
                f.write(r.text)
            
        except:
            raise "error exit !"
        
    
        
        
     
    
    def download_single(name,tax_id="9606",fmt="jaspar"):
        '''
        download only one matrix and picture
        
        '''
        print(name)
        params=modify_params(name=name)
        print(params)
        result = client.action(schema, action, params=params)
        
        file_name=result["results"][0]['name']+"_"+result["results"][0]['url'].split("/")[-2]
        
        
        print(file_name)
        # 建立文件夹
        try:
            os.mkdir(file_name)
        except FileExistsError:
            pass
        
        os.chdir(file_name)
        
        # 下载seq_log svg
        seqlog_url=result["results"][0]["sequence_logo"]
        print(seqlog_url) 
        download_svg(seqlog_url,result)
        # 下载matrix
        matrix_raw_url=result["results"][0]["url"]
        matrix_url=modify_matrix_format(matrix_raw_url,fmt=fmt)  
        print(matrix_url)
        download_matrix(matrix_url,file_name,fmt)
    
    
    
        
    def main(L:list,dir_path=".",fmt="jaspar"):
        '''
        L : TF 的列表
        path :需要下载的位置
        
        '''
        fmt_List=["json", "jsonp", "api", "yaml", "jaspar", "transfac", "pfm"]
        
        if fmt not in fmt_List:
            raise ValueError("check input format")
        
        os.chdir(dir_path)   
    
        for i in L:
            download_single(name=i,fmt=fmt)
            os.chdir(dir_path)  
    
    L=['CTCF', 'FOXA1', 'AR']
    dir_path="C:\\Users\\hp\\Desktop\\python并行"
    matrix_format="pfm"
    main(L,dir_path=dir_path,fmt=matrix_format)
    

    L :需要下载的TF
    dir_path :下载的目录
    matrix_format : 矩阵的格式。默认是jasper 格式

    物种默认是人类,需要自己修改modify_params(tax_id="9606" )里面的物种id.
    最终每个物种motif都放到各种目录下面。






    相关笔记:

    1.有序字典

    import collections
    
    dic = collections.OrderedDict()
    dic['k1'] = 'v1'
    dic['k2'] = 'v2'
    dic['k3'] = 'v3'
    print(dic)
    
    #输出:OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])
    

    2.对于变量命名空间理解。举例说明

    方法一:,p 放到全局变量中,creat_dir 函数会找到p 变量,结果正常。

    import os
    def creat_dir(name):
        os.mkdir(name+"_dir")
        os.chdir(name+"_dir")
        with open(name+"_txt","w") as f:
            f.write("hello\n"+p)
        os.chdir("C:\\Users\\hp\\Desktop\\python并行")
    
    L=["TF1","TF2"]
    for i in L:
        p=i*2
        creat_dir(i)
    

    方法二:p放入到main() ,变成局部变量。main() 函数检测p 未使用,creat_dir() 函数检测未发现p 变量。
    这时候需要显式指明creat_dir()函数的参数p.

    image.png

    函数参数添加上p就行

    import os
    def creat_dir(name,p):
        os.mkdir(name+"_dir")
        os.chdir(name+"_dir")
        with open(name+"_txt","w") as f:
            f.write("hello\n"+p)
        os.chdir("C:\\Users\\hp\\Desktop\\python并行")
        
    def main():
        L=["TF1","TF2"]
        for i in L:
            p=i*2
            creat_dir(i,p)
            print("ok "+i)
    main()
    

    3.python3 类型注释
    有利于检查bug,及其理解代码。

    a:int=5  # 变量
    
    from typing import List  # 数据结构
    l:List[int]=[1,2,3]
    
    def add(x:int, y:int) -> int:  # 函数输入输出标注
        return x + y
    
    检测类型正确的模块:mypy
    pip install mypy
    mypy test.py
    

    水平有限,希望得到您的意见及建议😊

    相关文章

      网友评论

          本文标题:[py3]使用接口下载jasper 中多个motif

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