【发布时间】:2019-02-21 09:51:55
【问题描述】:
我是 python 和生物信息学的新手。
我正在尝试首先将 VCF 文件加载到内存中,然后使用 pyvcf 库对其进行解析,但出现此错误:“IndexError: list index out of range*” 我在互联网上搜索过,但没有找到任何答案。
顺便说一句,代码是:
import mmap
import vcf
file_chr_mt_vcf = 'ALL.chrMT.phase3_callmom-v0_4.20130502.genotypes.vcf'
chr_mt = open(file_chr_mt_vcf, 'rb')
m = mmap.mmap(chr_mt.fileno(), 0, access = True)
chr_mt = vcf.Reader(m)
for i in chr_mt:
print i.is_snp
我该怎么办?有没有更好的方法来做到这一点?
应该提到,更改 pyvcf 库并移动到另一个库是不可能的,因为我已经编写了数百行代码来完成一些任务。我只想将 vcf 文件加载到内存中,然后使用 pyvcf 执行这些任务。
【问题讨论】:
-
您在哪一行得到错误?您是否检查过文件已正确打开和映射?你确定
vcf.Reader()可以用内存地址而不是文件来实例化吗? -
感谢您的评论。好吧,在
for循环行我收到了这个错误。我认为vcf.Reader不能用内存地址来实例化。不过,我不确定。如果无法使用内存地址对其进行实例化,有什么办法可以将文件加载到 RAM 中,然后使用vcf.Reader()打开它? -
如果不能用内存地址实例化它,尝试使用通常的选项:直接给它一个文件。或阅读文档以查看您的选择。我只是猜测。顺便说一句,您将对整个文件进行顺序遍历,映射文件不会给您任何好处。
-
映射文件会减少程序的总运行时间,因为pyvcf库真的很慢。
-
在规定的条件下做一个基准测试(顺序读取整个文件),让自己相信现实。
标签: python bioinformatics vcf-variant-call-format