附录:关于Python的有用信息

如果您没有花很多时间用Python编程,那么使用Biopython时出现的许多问题和问题通常与Python本身有关。本节试图呈现一些经常出现的想法和代码(至少对我们来说是这样!)同时使用Biopython库。如果您对可以在这里使用的有用指针有任何建议,请贡献!

把手到底是什么?

本文档中经常提到手柄,而且也相当令人困惑(至少对我来说!)。基本上,您可以将手柄视为文本信息的“包装器”。

与纯文本信息相比,手柄(至少)提供了两个好处:

  1. 它们提供了处理以不同方式存储的信息的标准方法。文本信息可以在文件中,或存储在内存中的字符串中,或命令行程序的输出,或在某个远程网站上,但手柄提供了处理所有这些格式信息的常见方法。

  2. 它们允许增量地阅读文本信息,而不是一次阅读全部内容。当您处理大型文本文件时,这一点非常重要,如果您必须全部加载这些文件,这些文件将耗尽您所有的内存。

手柄可以处理正在读取的文本信息(例如。G.从文件中读取)或写入(例如。G.将信息写入文件)。对于“读”手柄,常用的函数有 read() ,它从手柄读取整个文本信息,并且 readline() ,它一次读取一行信息。对于“写”柄,函数 write() 经常使用。

手柄最常见的用途是从文件中读取信息,这是使用内置Python函数完成的 open. Here, we handle to the file m_cold.fasta which you can download here (or发现Biopython源代码中包含的内容为 Doc/examples/m_cold.fasta ).

>>> handle = open("m_cold.fasta", "r")
>>> handle.readline()
">gi|8332116|gb|BE037100.1|BE037100 MP14H09 MP Mesembryanthemum ...\n"

Biopython中经常使用手柄来将信息传递给解析器。例如,自Biopython 1.54以来, Bio.SeqIOBio.AlignIO 允许您使用文件名而不是手柄:

from Bio import SeqIO

for record in SeqIO.parse("m_cold.fasta", "fasta"):
    print(record.id, len(record))

在Biopython的旧版本上,您必须使用手柄,例如

from Bio import SeqIO

handle = open("m_cold.fasta", "r")
for record in SeqIO.parse(handle, "fasta"):
    print(record.id, len(record))
handle.close()

此模式仍然有用-例如,假设您有一个想要解析的gZip压缩FASTA文件:

import gzip
from Bio import SeqIO

handle = gzip.open("m_cold.fasta.gz", "rt")
for record in SeqIO.parse(handle, "fasta"):
    print(record.id, len(record))
handle.close()

对于我们的纯文本文件解析器,在文本模式下使用gZip至关重要(默认为二进制模式)。

见章节  从压缩文件中解析序列 查看更多类似的示例,包括读取bzip2压缩文件。

从字符串创建手柄

一个有用的事情是能够将字符串中包含的信息转化为一个手柄。下面的示例展示了如何使用 StringIO Python标准库:

>>> my_info = "A string\n with multiple lines."
>>> print(my_info)
A string
 with multiple lines.
>>> from io import StringIO
>>> my_info_handle = StringIO(my_info)
>>> first_line = my_info_handle.readline()
>>> print(first_line)
A string

>>> second_line = my_info_handle.readline()
>>> print(second_line)
 with multiple lines.