美文网首页
[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