讀取和寫出
from pysam import variantfile
bcf_in = variantfile("test_in.vcf", "r")
bcf_out = variantfile("test_out.vcf", "w", header=bcf_in.header)
for rec in bcf_in.fecth():
bcf_out.write(rec)
variantfile函式得到的是pysam.libcbcf.variantfile物件, 這是乙個可遍歷物件, 通過dir()
可以發現它有__iter__
和__next__
方法。因此如果僅僅是遍歷全部記錄,那麼__iter__
等價於fecth
.
type(bcf_in) # 物件型別
dir(bcf_out) # 方法
vcf格式分為header和record兩個部分. record記錄每個變異位點的具體資訊,為了從中提取所需資料,需要理解pysam的解析策略。
rec1 = bcf_in.__next__()
dir(rec1)
vcf的record每一行都是9列+n列樣本(chrom, pos, id, ref, alt, qual, filter, info, format, sample1, sample2,..), 解析之後就是如下方法
.filter, .info, .format, .samples雖然都能返回類字典(或者說雜湊表)資料結果,但是在方法上存在差別。
variantrecordfilter物件可以通過.filter.add
增加過濾型別, 當然需要事先在header中新增元資訊,如下:
bcf_in.header.filters.add(id="ugly",number=none, type=none,description="i don't likt it") #增加員資訊
rec = bcf_in.__next__()
rec.filter.add("ugly") # 增加過濾條件
rec.filter.keys() # 檢視
variantrecordinfo物件可以刪除乙個鍵值對(pop),可以更新已有的鍵值對。
rec.info.pop('type') # 刪除type
rec.info['odds'] # 變更前
rec.info.update() #變更
rec.info['odds'] # 變更後
variantrecordformat和variantrecordsamples關係比較緊密,但前者只能檢視不提供方法進行修改, 而variantrecordsamples和variantrecordinfo一致。由於可以有多個樣本,提取資料的時候就需要多層迭代,例如提取所有樣本的gt
for key,value in rec.samples.iteritems():
print(key, value['gt'])
例如只有兩個樣本,我想比較這兩個樣本的gt是否相同
gt = [value['gt'] for value in rec.samples.values()]
gt[0].__eq__(gt[-1])
綜上,就可以在python中寫出乙個過濾器剔除缺失基因組記錄,保留其中樣本基因組純合但不同的記錄
import sys
from pysam import variantfile as vcf
if len(sys.ar**) < 3:
sys.exit(1)
else:
in_name = sys.ar**[1]
out_name = sys.ar**[2]
bcf_in = vcf(in_name)
# add metadata
command = "##pysamcommand=gt[0].__ne__((none,)) and gt[-1].__ne__((none,)) and gt[0].__ne__(gt[-1]) and gt[0].__ne__((0,1)) and gt[-1].__ne__((0,1))"
bcf_in.header.add_line(command)
bcf_out = vcf(out_name, "w", header=bcf_in.header)
for rec in bcf_in.__iter__():
gt = [value['gt'] for value in rec.samples.values()]
if gt[0].__ne__((none,)) and gt[-1].__ne__((none,)) and \
gt[0].__ne__((0,1)) and gt[-1].__ne__((0,1)) and \
gt[0].__ne__(gt[-1]):
bcf_out.write(rec)
fso使用操作
fso方法使用說明 set fso server.createobject scripting.filesystemobject fso檔案 顯示檔案列表 set f fso.getfolder folderspec set fc f.files for each f1 in fc s s f1.n...
操作使用分析
表示式的值為多少?15 嗎?16 嗎?18 嗎?對於這種情況,語言標準並沒有作出規定。有的編譯器計算出來為18,因為i 經過3 次自加後變為6,然後3 個6 相加得18 而有的編譯器計算出來為16 比如visual c 6.0,gcc,g 先計算前兩個i 的和,這時候i自加兩次,2 個i 的和為10...
Git使用操作
簡明一句介紹git 分布式版本控制系統,充當 專案或者筆記 等等文件 的版本記錄者。粑粑再也不用擔心你找不到兄弟姐妹啦 git安裝apt get install git root使用者安裝,非root使用者前面加上 sudo 在開始選單中找到安裝的git,git git bush,彈出乙個類似命令視...