【问题标题】:PyVCF: check for empty file [duplicate]PyVCF:检查空文件[重复]
【发布时间】:2015-07-02 19:56:48
【问题描述】:

我正在使用 PyVCF python 包来解析 vcf 文件。这是读取 vcf 文件的命令:

vcf_reader = vcf.Reader(open('file.vcf', 'r'))

在去下游之前,我想检查一下vcf_reader是否有数据,即file.vcf里面有记录。 如何查看?

对不起,我对 python 真的很陌生,我才刚刚开始,我试图在谷歌上寻找它,但没有成功。

谢谢。

【问题讨论】:

  • vcf.Reader 返回一个迭代器,因此您可以使用常用方法来检查迭代器是否为空(如我已将其标记为副本的问题中所见)。
  • 谢谢 Vulcan,我会尝试该帖子中提出的解决方案。 :)

标签: python


【解决方案1】:

您可以在执行任何操作之前使用 os.stat 检查文件大小:

from os import stat

if  stat("file.vcf").st_size != 0

或者使用您的迭代器检查任何不以# 开头的行,然后在调用 Reader 之前将文件对象重置为开头:

with open('file.vcf', 'r') as f:
     if any(not line.startswith("#") for line in f):
       f.seek(0)
       vcf_reader = vcf.Reader(f)

在没有元数据的情况下进行测试:

[<vcf.model._Record object at 0x7f2f95c68eb8>, <vcf.model._Record object at 0x7f2f95c7b9b0>, <vcf.model._Record object at 0x7f2f95c7ba58>, <vcf.model._Record object at 0x7f2f95c7bb38>, <vcf.model._Record object at 0x7f2f95c7bf60>]

with 没有输出。

【讨论】:

  • 我不熟悉 VCF 文件格式,但这仅适用于文件中也不存在元数据的情况。换句话说,如果任何元数据的至少一个字节存在,这种方法将无法确定记录本身是否存在。
  • 看一眼file format specification,似乎元数据确实存在,因此不幸的是,这个答案是不正确的,尽管可能有帮助。
  • 谢谢帕德莱克。在 vcf 格式中有一些以“#”开头的行,所以 @Vulcan 提到这种方法不起作用。
  • @cucurbit,如果需要,只需检查第一行或第二行,然后再次寻找文件的开头,有多少行?
  • @PadraicCunningham 你会不会有点误解这个问题? VCF 文件具有元数据,后跟一系列数据记录(如果存在)。问题是如何检查除了基本元数据之外是否还有VCF数据记录。
猜你喜欢
  • 2014-12-16
  • 2014-07-10
  • 2015-07-19
  • 1970-01-01
  • 2016-04-28
  • 2017-04-20
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多