附录:关于Python的有用信息
如果您没有花很多时间用Python编程,那么使用Biopython时出现的许多问题和问题通常与Python本身有关。本节试图呈现一些经常出现的想法和代码(至少对我们来说是这样!)同时使用Biopython库。如果您对可以在这里使用的有用指针有任何建议,请贡献!
把手到底是什么?
本文档中经常提到手柄,而且也相当令人困惑(至少对我来说!)。基本上,您可以将手柄视为文本信息的“包装器”。
与纯文本信息相比,手柄(至少)提供了两个好处:
它们提供了处理以不同方式存储的信息的标准方法。文本信息可以在文件中,或存储在内存中的字符串中,或命令行程序的输出,或在某个远程网站上,但手柄提供了处理所有这些格式信息的常见方法。
它们允许增量地阅读文本信息,而不是一次阅读全部内容。当您处理大型文本文件时,这一点非常重要,如果您必须全部加载这些文件,这些文件将耗尽您所有的内存。
手柄可以处理正在读取的文本信息(例如。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.SeqIO
和 Bio.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.