使用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.
函数参数添加上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
网友评论