本地使用Python通过染色体id+位置查询基因名列表

简介

通常使用bwa做mapping后会获得sam文件,而sam文件包含2个重要的字段:该序列mapping上的染色体id和位置(比如第2列(chr5)和第3列(36345037))

KMER_44   0     chr5    36345037        37      7M1D24M *       0       0       CTGATGCAAAAAAAAAAAAGCTTTTTTGAAG II*II?IIIIIIIIII8;III2I@I;I4E+2 XT:A:U  NM:i:1  X0:i:1  X1:i:0  XM:i:0  XO:i:1  XG:i:1  MD:Z:7^A24
KMER_45   0     chr5    142493459       37      13M2D18M        *       0    

若想通过这2个字段去查看该位置上包含哪些已经存在的基因,怎么做呢?
python提供了一个神奇的包:pyensembl
官网demo:

from pyensembl import EnsemblRelease

# release 77 uses human reference genome GRCh38
data = EnsemblRelease(77)

# will return ['HLA-A'] contig就是chr6的6(染色体id)
gene_names = data.gene_names_at_locus(contig=6, position=29945884)

# get all exons associated with HLA-A
exon_ids = data.exon_ids_of_gene_name('HLA-A')

安装步骤

1.先安装pyensembl

pip install pyensembl

2.运行的时候,提示你要下载一下基因数据库,运行下面的命令即可

pyensembl install --release 77 --species homo_sapiens

但是不知为何,windowns总是出现如下错误:

urlopen error ftp error: error_perm('550 Failed to change directory.',)>

总共需要下载4个压缩包

Homo_sapiens.GRCh38.77.gtf.gz
Homo_sapiens.GRCh38.cdna.all.fa.gz
Homo_sapiens.GRCh38.ncrna.fa.gz
Homo_sapiens.GRCh38.pep.all.fa.gz

python-ftp-bug无解,只能手动一个一个下载,如下提供一个csdn下载地址:
https://download.csdn.net/download/jiangpeng59/10729670

若是windowns需解压到如下目录,注意路径和自己的用户名对应即可(PJ.Javis)

C:\Users\PJ.Javis\AppData\Local\pyensembl\GRCh38\ensembl77\pyensembl\GRCh38\ensembl77\Cache

然后在此运行上面的命令,但又会提示

ModuleNotFoundError: No module named 'resource'

明明安装了resource但就是找不到,貌似是win的BUG,如下提供一个暴力的方法,修改文件"anaconda3\lib\site-packages\gtfparse\util.py",注释掉相应的内容- -,最后可正常运行命令。

from __future__ import print_function, division, absolute_import
import sys
#import resource

def memory_usage():
    """
    Returns number of megabytes of memory currently being used by this Python
    process
    """
    # resources = resource.getrusage(resource.RUSAGE_SELF)
    # if sys.platform == 'darwin':
    #     resident_bytes = resources.ru_maxrss
    #     resident_kilobytes = resident_bytes / 1024
    # else:
    #     resident_kilobytes = resources.ru_maxrss
    # return resident_kilobytes / 1024
    return 1024

你可能感兴趣的:(生物信息)