首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在skbio中打开用于TabularMSA的文件句柄

在skbio中打开用于TabularMSA的文件句柄
EN

Stack Overflow用户
提问于 2017-09-01 16:55:38
回答 1查看 84关注 0票数 2

嘿斯皮奥小队。

所以我需要允许DNA或RNA MSA。当我执行以下操作时,如果省略了alignment_fh.close() skbio,就会在get块中读取'non‘行,这使我认为我需要先关闭该文件,因此它将从开头开始,但是如果我添加了alignment_fh.close(),则无法让它读取该文件。我尝试过通过各种方法打开它,但我认为TabularMSA.read()应该允许文件或文件句柄。有什么想法?谢谢!

代码语言:javascript
复制
try:
    aln = skbio.TabularMSA.read(alignment_fh, constructor=skbio.RNA)
except:
    alignment_fh.close()
    aln = skbio.TabularMSA.read(alignment_fh, constructor=skbio.DNA)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-05 23:25:37

我尝试过通过各种方法打开它,但我认为TabularMSA.read()应该允许文件或文件句柄。

您是正确的: scikit-bio通常支持使用打开的文件句柄或文件路径来读取和写入文件。

您遇到的问题是,您的第一个TabularMSA.read()调用读取打开的文件句柄的全部内容,因此当第二个TabularMSA.read()调用在except块内命中时,文件指针已经位于打开的文件句柄的末尾--这就是为什么您收到一条错误消息,提示文件为空。

这种行为是有意的;当scikit-bio被赋予一个打开的文件句柄时,它将从文件中读取或写入文件,但不会尝试管理句柄的文件指针(这种类型的管理取决于代码的调用者)。

现在,当要求scikit-bio读取文件路径(即包含磁盘上文件路径的字符串或在某个URI上可访问的文件路径)时,scikit-bio将为您处理打开和关闭文件句柄的问题,因此这通常是比较容易的方法。

您可以使用文件路径或文件句柄来完成您的目标。在下面的示例中,假设aln_filepath是指向磁盘上对齐文件的str (例如"/path/to/my/alignment.fasta")。

  • 带有文件路径的,您可以简单地将文件路径传递给两个TabularMSA.read()调用;对于您来说,不需要open()close()调用。 try: aln = skbio.TabularMSA.read(aln_filepath,constructor=skbio.RNA),但ValueError: aln = skbio.TabularMSA.read(aln_filepath,constructor=skbio.DNA)除外
  • 带有文件句柄的:在第二次读取之前,您需要打开文件句柄并重置except块中的文件指针。 使用open(aln_filepath,'r')作为aln_filehandle: try: aln = skbio.TabularMSA.read(aln_filehandle,constructor=skbio.RNA),但ValueError: aln_filehandle.seek(0) # reset文件指针指向文件的开头,aln = skbio.TabularMSA.read(aln_filehandle,constructor=skbio.DNA)

注意:在这两个示例中,我都使用了except ValueError而不是"catch-all“except语句。我建议捕获特定的错误类型(例如ValueError),而不是任何异常,因为代码可能以不同于您预期的方式失败。例如,使用“所有捕获”except语句,用户将无法用Ctrl-C中断您的程序,因为KeyboardInterrupt将被捕获和忽略。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46004880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档