[ PROMPT_NODE_26208 ]
io_operations
[ SKILL_DOCUMENTATION ]
# 输入/输出操作
AnnData 提供了全面的 I/O 功能,用于读取和写入各种格式的数据。
## 原生格式
### H5AD (基于 HDF5)
AnnData 对象的推荐原生格式,提供高效的存储和快速访问。
#### 写入 H5AD 文件
python
import anndata as ad
# 写入文件
adata.write_h5ad('data.h5ad')
# 压缩写入
adata.write_h5ad('data.h5ad', compression='gzip')
# 指定压缩级别 (0-9,越高压缩率越高)
adata.write_h5ad('data.h5ad', compression='gzip', compression_opts=9)
#### 读取 H5AD 文件
python
# 将整个文件读入内存
adata = ad.read_h5ad('data.h5ad')
# 以 backed 模式读取 (针对大文件的延迟加载)
adata = ad.read_h5ad('data.h5ad', backed='r') # 只读
adata = ad.read_h5ad('data.h5ad', backed='r+') # 读写
# Backed 模式支持处理超过内存大小的数据集
# 仅在访问数据时将其加载到内存中
#### Backed 模式操作
python
# 以 backed 模式打开
adata = ad.read_h5ad('large_dataset.h5ad', backed='r')
# 在不将 X 加载到内存的情况下访问元数据
print(adata.obs.head())
print(adata.var.head())
# 子集操作创建视图
subset = adata[:100, :500] # 视图,不加载数据
# 将特定数据加载到内存
X_subset = subset.X[:] # 此时加载该子集
# 将整个 backed 对象转换为内存对象
adata_memory = adata.to_memory()
### Zarr
分层数组存储格式,针对云存储和并行 I/O 进行了优化。
#### 写入 Zarr
python
# 写入 Zarr 存储
adata.write_zarr('data.zarr')
# 指定分块 (对性能很重要)
adata.write_zarr('data.zarr', chunks=(100, 100))
#### 读取 Zarr
python
# 读取 Zarr 存储
adata = ad.read_zarr('data.zarr')
#### 远程 Zarr 访问
python
import fsspec
# 从 S3 访问 Zarr
store = fsspec.get_mapper('s3://bucket-name/data.zarr')
adata = ad.read_zarr(store)
# 从 URL 访问 Zarr
store = fsspec.get_mapper('https://example.com/data.zarr')
adata = ad.read_zarr(store)
## 其他输入格式
### CSV/TSV
python
# 读取 CSV (基因为列,细胞为行)
adata = ad.read_csv('data.csv')
# 使用自定义分隔符读取
adata = ad.read_csv('data.tsv', delimiter='t')
# 指定第一列为行名
adata = ad.read_csv('data.csv', first_column_names=True)
### Excel
python
# 读取 Excel 文件
adata = ad.read_excel('data.xlsx')
# 读取特定工作表
adata = ad.read_excel(