【问题标题】:loading a VCF file into memory, and then, reading it with pyvcf将 VCF 文件加载到内存中,然后使用 pyvcf 读取它
【发布时间】: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


【解决方案1】:

我想您必须重新检查“m = mmap.mmap(chr_mt.fileno(), 0, access = True)”代码。如果这引发错误,则不会在以下代码行中读取 vcf。 此外,即使读取了 vcf 文件,如果您尝试通过执行 for 循环来获取 vcf 中的每个条目。您应该尝试:

for record in chr_mt:
    print(record)

这是为了检查 vcf 是否被正确读取。 for 循环中使用的“记录”一词我猜是默认名称。 试试这个。

【讨论】:

    猜你喜欢
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 2016-03-09
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 2013-02-01
    相关资源
    最近更新 更多