1.解决问题:在NCBI中参考基因组的GenBank和RefSeq sequence拥有不同的染色体号(如下图),某些情况下需要进行染色体号的相互转化。故自己写一个python脚本,进行简易的转化。

Molecule name GenBank sequence RefSeq sequence Unlocalized
sequences count
Chromosome 1 CM000812.5 = NC_010443.5 0
Chromosome 2 CM000813.5 = NC_010444.4 0
Chromosome 3 CM000814.5 = NC_010445.4 0

2.文件准备:

2.1 ID_list:记录有转换信息的list列表,以 \t 作为分隔符,左右一一对应。

$ cat ID_list
CM000812.5  NC_010443.5
CM000813.5  NC_010444.4
CM000814.5  NC_010445.4
CM000815.5  NC_010446.5
CM000816.5  NC_010447.5
CM000817.5  NC_010448.4
CM000818.5  NC_010449.5
...

2.2 pig_gene.bed:需要转化的bed文件,标准bed文件前6列格式,以 \t 作为分隔符,bed文件可以自己用awk手动从GFF中提取(推荐)或者利用python模块jcvi等其它方法进行提取。

# 此处利用awk从猪的参考基因组GFF文件中提取对应gene的bed文件
less GCF_000003025.6_Sscrofa11.1_genomic.gff.gz | grep -v "#" | \awk '$3=="gene" {print$0}' | \awk 'BEGIN{OFS=FS="\t"}{split($9,x,";");for(i in x){n=split(x[i],y,"=");if(n==2)INFO[y[1]]= y[2];}printf("%s\t%d\t%d\t%s\t%s\t%s\n",$1,$4-1,$5,INFO["Name"],$6,$7);delete INFO;}'|less > pig_gene.bed
$ cat pig_gene.bed
...
NC_010443.5 262243224   262258186   NDUFA8  .   -
NC_010443.5 262258132   262295132   MORN5   .   +
NC_010443.5 262297556   262322777   LHX6    .   -
NC_010443.5 262333528   262356280   RBM18   .   -
NC_010443.5 262355993   262416116   MRRF    .   +
...
NC_010460.4 7242377 7279345 KEL .   +
NC_010460.4 7279559 7282874 C18H7orf34  .   -
NC_010460.4 7285185 7341965 TRPV5   .   +
NC_010460.4 7332252 7348383 TRPV6   .   +
NC_010460.4 7346792 7419859 EPHB6   .   -
...

2.3  Chr_Convert.py:自己写的转换的python脚本,可处理多个不同文件,用python的argpase包简单的包装了下,便于重复使用外部传参,写的比较简洁,还有待改进^-^。

# -*- coding: UTF-8 -*-
# import os
import pandas as pd
import argparse  # 1、导入argpase包def parse_args():parse = argparse.ArgumentParser(description='Convert GenBank sequence and RefSeq sequence of chr ID')  # 2、创建参数对象parse.add_argument('-b', '--bed', type=str,help='bed file need to convert ')  # 3、往参数对象添加参数1parse.add_argument('-l', '--clist', type=str,help='Chromosome conversion corresponding list')  # 3、往参数对象添加参数2parse.add_argument('-o', '--output', type=str,help='output file path')  # 3、往参数对象添加参数3args = parse.parse_args()  # 4、解析参数对象return args# 加载文件
def load_file(file):data = pd.read_csv(str(file), sep='\t', header=None)
#     print(data)return data# 保存文件
def save_file(dataframe, file_path):dataframe.to_csv(file_path, sep='\t' ,index=False,header=None)print("数据已保存:", file_path)# 主函数
def main():if args.clist:data1 = load_file(args.clist)  # 5、使用解析对象.参数获取使用命令行参数if args.bed:data2 = load_file(args.bed)data3 = data2.copy()ID_dict = dict((data1.iloc[n, 0], data1.iloc[n, 1]) #制作字典for n in range(len(data1)))ID_res_dict = {v: k for k, v in ID_dict.items()}    #转换键和值,可根据情况调整for n in range(len(data3)):if data3.iloc[n, 0] in list(ID_res_dict.keys()):data3.iloc[n, 0] = ID_res_dict[data3.iloc[n, 0]]    #进行转化if args.output:save_file(data3, args.output)if __name__ == '__main__':args = parse_args()main()

效果展示:python Chr_Convert.py -h

$ python Chr_Convert.py -h
usage: Chr_Convert.py [-h] [-b BED] [-l CLIST] [-o OUTPUT]Convert GenBank sequence and RefSeq sequence of chr IDoptional arguments:-h, --help            show this help message and exit-b BED, --bed BED     bed file need to convert-l CLIST, --clist CLISTChromosome conversion corresponding list-o OUTPUT, --output OUTPUToutput file path

共设置了三个可选参数:

-b        对应需要转换的bed文件

-l         对应转换的ID list

-o        对应输出文件的名称/路径

3.测试使用:

$ python Chr_Convert.py -l ID_list -b pig_gene.bed -o pig_gene_fix.bed
...
CM000812.5      513363  540948  ERMARD  .       -
CM000812.5      541009  552018  TCTE3   .       +
CM000812.5      555648  576781  PHF10   .       +
CM000812.5      575717  578441  C1H6orf120      .       -
...
CM000830.5  87315354    87319580    RIPPLY1 .   -
CM000830.5  87352694    87355724    CLDN2   .   +
CM000830.5  87369310    87427296    MORC4   .   -
CM000830.5  87512886    87575118    RBM41   .   -
...

成功转化!自己写的小脚本,作为解决问题和代码练习,略微有些粗糙,其实还可以在此基础上再改进改进,加油研究生!

利用python快速转换GenBank和RefSeq的染色体号相关推荐

  1. python批量读取图片并复制入word_提取出 Word 文档里的图片 并利用 python 批量转换格式...

    日常工作中,你是否遇到过这样的场景,领导发来一份 Word 文档,要求你将文档中的图片存储到一个文件夹内,并且还要将图片都改成 .jpg 或者 .png,你会怎么办?你是不是一边内心崩溃,一边开始一张 ...

  2. 教你一招利用Python快速去除图片水印

    大家好,我是IT界搬运工. 相信大家都有在网上下载好图片但是有水印的烦恼,那么问题就来了:看到心爱的图片想要"占为己有".怎么把图片上的水印去除呢?今天我就来教你一招利用Pytho ...

  3. windows和Linux利用Python快速搭建一个网站

    windows和Linux利用Python快速搭建一个网站 一.windows 步骤1:安装Python3(自行百度) 步骤2:在cmd窗口输入ipconfig查看本机ip地址,IPV4那一行.如:1 ...

  4. 钉钉一行代码_利用Python快速搭建钉钉和邮件数据推送系统

    前面的文章我们写到了利用Python实现钉钉和邮件的数据推送,在数据处理这一块实现了对mysql和odps的数据获取和处理,可以满足常规业务大部分数据场景需求,在一家初创公司数据基础建设还不完善的时候 ...

  5. 利用Python快速绘制海报级别地图

    利用Python快速绘制海报级别地图 1.简介 2.利用prettymaps快速制作海报级地图 2.1 prettymaps的几种使用方式 2.1.1 圆形模式 2.1.2 圆角矩形模式 2.1.3 ...

  6. [爬虫实战]利用python快速爬取NCBI中参考基因组assembly的相关信息

    1.问题导向 最近在做某个课题的时候,按老师的要求需要从NCBI中批量下载不同物种的参考基因组,同时收集相应参考基因组的一些组装信息,基因组非常多,导致工作量巨大,一个一个手动收集的话,既费时又费力, ...

  7. python 播放视频 ftp_利用Python快速搭建HTTPFTP服务器

    用 Python 快速实现 FTP 服务器 有时当你想快速搭建一个 FTP 服务器来临时实现文件上传下载时,这是特别有用的.我们这里利用 Python 的Pyftpdlib 模块可以快速的实现一个 F ...

  8. 【Python数据分析】利用Python快速对两个EXCEL表格进行内容比较并找出差异

    如何快速找到两个EXCEL表格的数据差异?今天就与大家分享如何利用Python数据分析3分钟搞定,不管EXCEL表格有多少行数据,代码总是那么几行.不多说了,上案例(文末附Python数据分析案例下载 ...

  9. 利用python快速将一个工作表拆分成多个工作簿

    利用python提高工作效率的一个小技巧 很多人会在日常的工作中遇到这样的工作需求:需要将一个总表按"分公司/按月份"等拆分成多个工作簿,分发给对应的人员.一开始想到的方法是:第一 ...

最新文章

  1. intellij idea 怎么全局搜索--转
  2. Nginx——反向代理路径重写重定向实践示例
  3. educoder 使用线程锁(lock)实现线程同步_线程间的通信(一)
  4. NOIP2017年11月9日赛前模拟
  5. c语言 字符串分隔,c语言字符串分割–strtok | 逗号分隔-huangea的博客
  6. Android中的IPC机制
  7. linux环境用tar报错,Linux环境使用TAR命令快速部署安装Oracle
  8. label用js,jquery取值赋值,以及怎么在后台取值
  9. Facebook开源项目:我们为什么要用Fresco框架?
  10. FTP连接成功但是无法显示目录的解决方式
  11. 一起来学FPGA(vhdl)三:分频器实验
  12. ( 教程 ) 微信公众号做淘宝优惠券自动查券返利机器人怎么设置?
  13. 《网络攻防》第二周作业
  14. 刚性捆绑,无线运营新模式
  15. python做一个网页多少钱_网站建设平台_ 网站建设多少钱_ _做一个企业网站需要多少钱_64岁的Python之父表示退休后太无聊 正式加入微软...
  16. 三十七、缓存注解@Cacheable、@CacheEvict、@CachePut详解
  17. OSChina 周一乱弹 ——我秃我长寿?
  18. 天猫精灵接入ESP8266+DHT11(blink)
  19. ratingbar 的使用
  20. LeetCode代码刷题(17~24)

热门文章

  1. py2neo.database.work.ClientError: [Procedure.ProcedureNotFound]
  2. SVN出现黄色感叹号,红绿双箭头
  3. 虚拟现实和增强现实技术_增强现实和虚拟现实在NBA中的作用
  4. 视频标清、高清、超清、1080P(这么多不同规格)
  5. 【C++实训】基于MVC模型开发的高校教务管理系统【附完整报告+示例程序+日记+源码】
  6. Linux内核在中国大发展的黄金十年-写于中国Linux存储、内存管理和文件系统峰会十周年之际...
  7. 计算机中丢失swr.dll,initpki.dll加载失败找不到指定的模块0x80004005错误代码怎么办win10...
  8. javaweb_会话管理(sessionCookie)
  9. luogu P4233 射命丸文的笔记
  10. mysql微擎用户名密码_微擎后台管理员密码忘记怎么办?教你一个简单的方法