PyVCF

PyVCF は VCF ファイルをパースするための Python ライブラリーである。VFC ファイルは、SNPs の位置やクオリティなどの情報が含まれている。PyVCF を利用することで VCF ファイルから必要なデータを簡単に取得できる。

PyVCF の使い方は Python の標準的なファイルの読み込みと似ている。すなわち、VCF ファイルを vcf.Reader メソッドで開き、それを for 文で回す。次の例は、VCF ファイルから各サンプルの genotype (GT) 値を取得してタブ区切りのファイルに保存する例。

import vcf


def format_str(x):
    '''
    Change numbers to a string, and change list to a string.
    '''
    if x is None:
        y = ''
    else:
        if isinstance(x, list):
            if not x:
                y = ';'.join(x)
            else:
                y = ''
        else:
            y = str(x)
    return y


def parse_vcf(i, o):
    with open(o, 'w') as outfh:
        vcf_fh = vcf.Reader(open(i, 'r'))
        for snp_record in vcf_fh:
            gt_list = []
            for sample in snp_record.samples:
                gt_list.append(sample['GT'])
            
            new_record = [format_str(snp_record.CHROM),
                          format_str(snp_record.POS),
                          format_str(snp_record.ID),
                          format_str(snp_record.REF),
                          format_str(snp_record.ALT)]
            
            new_record.extend(gt_list)
            
            outfh.write('\t'.join(new_record) + '\n')


parse_vcf('sample.vcf', 'gtdata.txt')