生信之旅

扫码分享下吧!
分享

将VARIANT CALL FORMAT(VCF)文件转为CSV文件

由于实习工作的需要,得将VCF文件转为CSV文件,这里我使用的是Python3和pyvcf这个包来进行转换。在官网教程中提及了vcf_melt脚本,该脚本好像也可以进行转换,但是我这边尝试了每次成功,所以我就直接编写代码进行转换,具体代码如下:

#!/usr/bin/env python3
 # -*- coding: utf-8 -*-
 # @Time : 18-5-31 下午3:28
 # @Author : burning
 # @File : vcf2csv.py
 # @function:

import vcf

vcf_name = "clinvar_papu.vcf"
 out_file = "result_papu.csv"
 vcf_reader = vcf.Reader(open(vcf_name, 'r'))
 out = open(out_file, "w")

infos = vcf_reader.infos.keys()
 header = ['CHROM', 'POS', 'ID', 'REF', 'ALT', 'QUAL', 'FILTER'] + [x for x in infos]
 header = ','.join(map(str, header))
 out.write(header + "\n")

def flatten(x):
 if type(x) == type([]):
 x = ';'.join(map(str, x))
 return x

for record in vcf_reader:
 info_row = [flatten(record.INFO.get(x, None)) for x in infos]
 fixed = [record.CHROM, record.POS, record.ID, record.REF, record.ALT]
 row = fixed
 row += [record.QUAL or '.']
 row += [record.FILTER or '.']
 row += info_row
 row = ','.join(map(str, row))
 out.write(row + "\n")

out.close()
print("Finished!\n")

 

版权声明:本文转载请注明出处!

最新评论:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

captcha

公告栏

有任何问题均可以在文章页面留言!或者邮件 burning@burning.net.cn 欢迎关注微信公众号 “生信之旅”,每天均可在菜单栏领取外卖红包、支付宝红包!最高20元!

服务器推荐

欢迎关注公众号

欢迎关注生信之旅