[ PROMPT_NODE_27158 ]
file_io
[ SKILL_DOCUMENTATION ]
# 文件 I/O 与数据格式
## 概述
PyOpenMS 支持多种质谱文件格式的读写。本指南涵盖文件处理策略及特定格式的操作。
## 支持的格式
### 谱图数据格式
- **mzML**: 标准的基于 XML 的质谱数据格式
- **mzXML**: 早期的基于 XML 的格式
- **mzData**: XML 格式(已弃用但仍支持)
### 鉴定格式
- **idXML**: OpenMS 原生鉴定格式
- **mzIdentML**: 用于鉴定数据的标准 XML 格式
- **pepXML**: X! Tandem 格式
- **protXML**: 蛋白质鉴定格式
### 特征与定量格式
- **featureXML**: OpenMS 检测到的特征格式
- **consensusXML**: 跨样本共识特征格式
- **mzTab**: 用于报告的制表符分隔格式
### 序列与库格式
- **FASTA**: 蛋白质/肽段序列
- **TraML**: 靶向实验的转换列表
## 读取 mzML 文件
### 内存加载
将整个文件加载到内存中(适用于较小文件):
python
import pyopenms as ms
# 创建实验容器
exp = ms.MSExperiment()
# 加载文件
ms.MzMLFile().load("sample.mzML", exp)
# 访问数据
print(f"谱图: {exp.getNrSpectra()}")
print(f"色谱图: {exp.getNrChromatograms()}")
### 索引访问
针对大文件的高效随机访问:
python
# 创建索引访问
indexed_mzml = ms.IndexedMzMLFileLoader()
indexed_mzml.load("large_file.mzML")
# 按索引获取特定谱图
spec = indexed_mzml.getSpectrumById(100)
# 按原生 ID 访问
spec = indexed_mzml.getSpectrumByNativeId("scan=5000")
### 流式访问
针对超大文件的内存高效处理:
python
# 定义消费者函数
class SpectrumProcessor(ms.MSExperimentConsumer):
def __init__(self):
super().__init__()
self.count = 0
def consumeSpectrum(self, spec):
# 处理谱图
if spec.getMSLevel() == 2:
self.count += 1
# 流式处理文件
consumer = SpectrumProcessor()
ms.MzMLFile().transform("large.mzML", consumer)
print(f"已处理 {consumer.count} 个 MS2 谱图")
### 缓存访问
平衡内存使用与速度:
python
# 使用磁盘缓存
options = ms.CachedmzML()
options.setMetaDataOnly(False)
exp = ms.MSExperiment()
ms.CachedmzMLHandler().load("sample.mzML", exp, options)
## 写入 mzML 文件
### 基本写入
python
# 创建或修改实验
exp = ms.MSExperiment()
#