今天有位粉丝问了我一个scanpy读取10X数据报错的问题。报的错是没有找到相应的文件。

小编用10X官网的数据测试了一下。文件夹结构如下

读取代码如下
import scanpy as sc
adata = sc.read_10x_mtx('./10X')
print(adata)
是可以成功读到python里面的

考虑到这位粉丝提供的文件名与10X官网下载的文件名不太一样,小编又测试了一下,随意修改了一下10X文件夹里面文件的名字,加了一个前缀S1_。再次读取就报错了修改后的文件名如下

读取代码如下
import scanpy as sc
adata = sc.read_10x_mtx('./10X_prefix')
print(adata)
报的正是前面展示的错误

如果在读取时候加上prefix这个参数,又能正常读入
import scanpy as sc
adata = sc.read_10x_mtx('./10X_prefix',prefix="S1_")
print(adata)
小编仔细查看了一下报错的信息,在scanpy\readwrite.py文件中找到了读取文件的具体代码。可以看到read_10x_mtx这个函数只能识别固定格式的文件,即matrix.mtx, barcodes.tsv和genes.tsv这个三个文件(无论是否压缩),最多可以在这三个文件前面加上一个相同的前缀。

而对比R语言读取10X数据,可以发现R的Read10X这个函数更加的死板
library(Seurat)
#通过Read10X读取矩阵
scRNA.data <- Read10X(data.dir = "10X")
#32738 x 2700 sparse Matrix of class "dgCMatrix"
只能识别matrix.mtx, barcodes.tsv和genes.tsv这三个文件,连前缀都不接受。

所以无论是python还是R,在读取10X文件夹包含的三个数据文件这种格式时,如果遇到相同的报错,一个比较简单的方法是,将文件夹中的三个文件的名字改成matrix.mtx, barcodes.tsv和genes.tsv即可。可以通过不同的文件夹名字来区分样本。
网友评论