主要内容

fileDatastore

数据存储与自定义文件阅读器

描述

使用一个FileDatastore对象来管理大型文件集的自定义格式的集合并不一定适合在内存中或者在一个大型的自定义格式文件不适合在内存中。您可以创建一个FileDatastore对象使用fileDatastore函数,指定它的属性,然后导入使用对象和过程数据的功能。

创建

描述

fds= fileDatastore (位置“ReadFcn”,@fcn)从集合中创建一个数据存储的文件规定位置和使用功能fcn从文件读取数据。

例子

fds= fileDatastore (位置“ReadFcn”,@fcn,名称,值)指定额外的参数和属性fds使用一个或多个名称-值对参数。例如,您可以指定哪些文件包含在数据存储取决于他们的扩展fileDatastore(位置、“ReadFcn @customreader“FileExtensions”(“开头”、“.extx”))

输入参数

全部展开

文件或文件夹包括在数据存储中,指定为一个文件集对象,如文件路径,或者作为一个DsFileSet对象。

  • 文件集对象,您可以指定位置作为一个文件集对象。作为一个指定位置文件集数据存储对象会导致更快的建设时间相比,或指定一个路径DsFileSet对象。有关更多信息,请参见matlab.io.datastore.FileSet

  • 文件路径,您可以指定一个文件路径作为特征向量或字符串标量。您可以指定多个文件路径作为一个单元阵列特征向量或一个字符串数组。

  • DsFileSet对象,您可以指定一个DsFileSet对象。有关更多信息,请参见matlab.io.datastore.DsFileSet

文件或文件夹可能是本地或远程:

  • 本地文件或文件夹-指定本地文件或文件夹路径。如果文件不在当前文件夹,然后指定完整或相对路径。指定文件夹的子文件夹内文件不会自动包含在数据存储中。您可以使用通配符(*)时指定的本地路径。这个角色指定数据存储包括所有匹配的文件或匹配所有文件文件夹。

  • 远程文件或文件夹-指定完整路径远程文件或文件夹作为一个统一资源定位符(URL)的形式hdfs: / / /path_to_file。有关更多信息,请参见使用远程数据

指定一个文件夹时,数据存储只包含文件支持的文件格式和忽略任何其他格式的文件。金宝app指定一个自定义列表的文件扩展名,包括数据存储,看到FileExtensions财产。

例子:“file1.ext”

例子:“. . / dir /数据/ file1.ext”

例子:{“C: \ dir \ data \ file1.exts”,“C: \ dir \ data \ file2.extx”}

例子:“C: \ dir \ data \ * . ext "

函数,读取文件数据,指定为一个函数处理。

的签名函数所代表的函数处理@fcn取决于指定的值ReadMode。读取文件数据的函数必须确认其中一个签名。

ReadMode

ReadFcn签名

“文件”(默认)

函数必须有这个签名:

函数数据= MyReadFcn(文件名)……结束

文件名——名字的文件阅读。

数据——相应的文件数据。

“partialfile”

函数必须有这个签名:

功能(数据、用户数据做)= MyReadFcn(文件名,用户数据)…结束

用户数据——设置和读取字段用户数据多个之间保存数据FileDatastore读调用。

完成——设置这个逻辑参数要么真正的

  • ——继续读取当前文件。

  • 真正的- - - - - -终止当前文件阅读和阅读下一个文件。

数据——文件数据的一部分。

“字节”

函数必须有这个签名:

函数数据= MyReadFcn(文件名、抵消、大小)…结束

抵消——指定字节抵消第一个字节的文件。

大小——指定读取的字节数在当前读操作。

数据——指定大小的文件数据的一部分BlockSize

FileDatastore增加两个抵消大小输入基于指定的值BlockSize

中指定的值@fcn,设置的值ReadFcn财产。

例子:@customreader

数据类型:function_handle

名称-值参数

指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

R2021a之前,用逗号来分隔每一个名称和值,并附上的名字在报价。

例子:fds = fileDatastore (“C: \ dir \数据”,“FileExtensions”{“开头”、“.extx”})

子文件夹包含标志,指定为逗号分隔组成的“IncludeSubfolders”真正的,0或1。指定真正的包括每个文件夹内的所有文件和子文件夹只包括每个文件夹内的文件。

如果你不指定“IncludeSubfolders”,那么默认值是

例子:“IncludeSubfolders”,真的

数据类型:逻辑|

自定义格式的文件扩展名,指定为逗号分隔组成的“FileExtensions”一个特征向量,单元阵列特征向量,标量字符串或字符串数组。

当你指定一个文件扩展名,fileDatastore函数创建一个数据存储对象只对指定的文件扩展名。您还可以创建一个数据存储的文件没有任何扩展通过指定“FileExtensions”作为一个空的特征向量,。如果你不指定“FileExtensions”,然后fileDatastore自动包含一个文件夹内的所有文件。

例子:“FileExtensions”、“

例子:“FileExtensions”、“开头”

例子:“FileExtensions”(“开头”、“.extx”)

数据类型:字符|细胞|字符串

函数来预览输入数据,指定为一个函数处理。

如果你不指定一个预览功能,FileDatastore使用指定的值@ReadFcn作为默认的预览功能。此外,您可以指定您自己的自定义为您的数据预览功能。

  • @ReadFcn(默认)——使用ReadFcn样本FileDatastore数据。这个选项会导致较慢的性能建设。

  • 函数处理——使用定制预览功能FileDatastore建设样本输入数据。使用PreviewFcn只提供一个函数,读取所需的最小输入数据预览和高建设的一部分。

指定的功能PreviewFcn必须返回值具有相同的数据类型吗ReadFcn的回报。

数据类型:function_handle

部分文件的读取,指定为“文件”,“partialfile”,或“字节”

“文件”(默认)

使用读模式“文件”当您的自定义函数中指定ReadFcn在一个读操作,读取完整的文件。

基于您的自定义函数,文件中读取数据存储与每个调用读取完整的文件。并行化的单位是一个完整的文件。

“partialfile”

使用读模式“partialfile”当您的自定义文件读取函数中指定ReadFcn,只读取每个读操作文件的一部分。

基于您的自定义函数,文件中读取数据存储读取只有一部分文件的每一个调用函数。

“partialfile”读模式,并行化的单位是一个完整的文件。多个在连续操作,需要读一个完整的文件。

“字节”

使用读模式“字节”当您的自定义函数中指定ReadFcn,读BlockSize大小的部分文件,每个读操作。

FileDatastore并行化的单位设置为一块文件包含所指定的字节数BlockSize

基于您的自定义函数,文件中读取数据存储读取BlockSize大小的部分文件的每一次调用读取功能。多个并行操作需要读取一个完整的文件。

使用子集洗牌功能上的FileDatastore对象,必须设置“ReadMode”“文件”

数据类型:字符|字符串

与每一个读取的字节数操作,指定为一个正整数。

确保你可以分配多个块文件的多个并行MATLAB®工人,指定BlockSize一个正整数比131072年个字节(128年千字节)。

指定或改变的价值BlockSize,您必须首先设置ReadMode“字节”FileDatastore设置的默认值BlockSize基于指定的值ReadMode

  • 如果ReadMode“文件”“partialfile”,然后FileDatastore设置默认BlockSize

  • 如果ReadMode“字节”,然后FileDatastore设置默认BlockSize128年兆字节。

替代的文件系统根路径,指定为名称参数组成的“AlternateFileSystemRoots”和一个字符串向量或一个单元阵列。使用“AlternateFileSystemRoots”当您创建一个数据存储在本地机器上,但需要在另一台机器上访问和处理数据(可能是不同的操作系统)。另外,当处理数据使用并行计算工具箱™和MATLAB并行服务器™,数据存储在您的本地机器复制的数据在不同的平台上云或集群机器,您必须使用“AlternateFileSystemRoots”把根路径。

  • 把一组相当于一根路径,指定“AlternateFileSystemRoots”作为字符串向量。例如,

    [" Z: \数据集”、“/ mynetwork /数据集”)

  • 把多个根集数据存储路径是等价的,指定“AlternateFileSystemRoots”作为一个单元阵列包含多个行,每一行表示一组等价的根路径。指定单元阵列中的每一行作为一个字符串向量或单元阵列的特征向量。例如:

    • 指定“AlternateFileSystemRoots”作为一个字符串向量的单元阵列。

      {[Z: \“数据集”、“/ mynetwork /数据集”);…[" Y: \数据集”、“/ mynetwork2 /数据集”、“年代:\数据集”)}

    • 另外,指定“AlternateFileSystemRoots”作为一个单元阵列单元阵列的特征向量。

      {{“Z: \数据集”、“mynetwork /数据集”},…{“Y: \数据集”,“mynetwork2 /数据集”,年代:\数据集的}}

的价值“AlternateFileSystemRoots”必须满足以下条件:

  • 包含一个或多个行,每一行指定一组等价的根路径。

  • 每一行指定多个根路径和每个根路径必须包含至少两个字符。

  • 根路径都是独一无二的,没有子文件夹。

  • 包含至少一个根路径条目指向文件的位置。

有关更多信息,请参见为处理在不同的机器上或设置数据存储集群

例子:[" Z: \数据集”、“/ mynetwork /数据集”)

数据类型:字符串|细胞

属性

全部展开

FileDatastore属性描述相关的文件FileDatastore对象。除了文件属性,你可以指定的值FileDatastore使用名称-值对参数属性。查看或修改属性在创建对象时,使用点符号。

文件包含在数据存储、解析为特征向量,单元阵列的特征向量,字符串标量、向量或字符串或字符串数组,其中每个字符是一个文件的完整路径。的位置论点的fileDatastore数据存储函数定义文件创建数据存储时。

例子:{“C: \ dir \ data \ file1.ext”;“C: \ dir \ data \ file2.ext”}

例子:“hdfs: / / /数据/ * .mat”

数据类型:字符|细胞|字符串

这个属性是只读的。

用于构建数据存储文件夹,作为特征向量的单元阵列返回。单元阵列是面向一个列向量。每个字符向量是通往一个文件夹,其中包含的数据文件。的位置论点的fileDatastore数据存储函数定义文件夹创建数据存储时。

文件夹当你修改属性重置文件财产的FileDatastore对象。

数据类型:细胞

函数,读取文件数据,指定为一个函数处理。

指定的值@fcn,设置的值ReadFcn财产。

例子:@MyCustomFileReader

数据类型:function_handle

这个属性是只读的。

垂直concatenateable国旗,指定为一个逻辑真正的。首先创建时指定该属性的值FileDatastore对象。

真正的

的多个读取FileDatastore垂直concatenateable对象返回统一的数据。

UniformRead属性值是真正的:

  • ReadFcn垂直concatenateable函数必须返回数据;否则,readall方法返回一个错误。

  • 底层数据的输出类型函数输出的数据类型是一样的ReadFcn

(默认)

的多个读取FileDatastore对象不返回垂直concatenateable统一的数据。

UniformRead属性值是:

  • readall返回一个单元阵列。

  • 返回一个高大的单元阵列。

例子:fds = fileDatastore(位置、“ReadFcn @load,“UniformRead”,真的)

数据类型:逻辑|

这个属性是只读的。

写作的格式支持列表,返回一个行向金宝app量的字符串。这个属性指定了使用时可能的输出格式writeall写输出文件的数据存储。

数据类型:字符串

对象的功能

hasdata 确定数据可用来读
numpartitions 数量的数据存储分区
分区 分区数据存储
预览 预览数据存储中数据的子集
在数据存储中读取数据
readall 读取所有数据存储中的数据
writeall 写数据存储文件
重置 数据存储重置为初始状态
变换 变换数据存储
结合 合并来自多个数据存储的数据
isPartitionable 确定是否可分区的数据存储
isShuffleable 确定是否shuffleable数据存储
洗牌 洗牌在数据存储的所有数据
子集 创建数据存储或文件集的子集

例子

全部折叠

创建一个fileDatastore对象使用一个文件集对象或文件路径。

创建一个文件集对象。创建一个fileDatastore对象。

fs = matlab.io.datastore.FileSet (“airlinesmall.parquet”);fds = fileDatastore (fs,“ReadFcn”@load)
fds =FileDatastore属性:matlab文件:{“…\ \ matlab工具箱\ \ demo \ airlinesmall。镶花的}文件夹:{”……matlab \ matlab工具箱\ \ demo \ '} UniformRead: 0 ReadMode: '文件' BlockSize: Inf PreviewFcn: @load Su金宝apppportedOutputFormats:[“三种”“csv”“xlsx”“xls”“铺”“parq”“png”“jpg”“jpeg”“tif”“tiff”“wav”“flac”“ogg”“mp4”“m4a格式”]ReadFcn: @load AlternateFileSystemRoots: {}

或者,您可以使用文件路径来创建你的fileDatastore对象。

fds = fileDatastore (“airlinesmall.parquet”,“ReadFcn”,@load);

创建一个包含所有的数据存储.mat在MATLAB®文件演示文件夹中,指定负载函数来读取文件数据。

fds = fileDatastore (fullfile (matlabroot“工具箱”,“matlab”,“演示”),“ReadFcn”@load,“FileExtensions”,“.mat”)
fds =FileDatastore属性:文件:{“…\ matlab \ matlab工具箱\ \ demo \ accidents.mat”;’……\ matlab \ matlab工具箱\ \ demo \ airfoil.mat”;“……\ matlab \ matlab工具箱\ \ demo \ airlineResults。垫”……文件夹和38}:{…matlab \ matlab工具箱\ \ demo \ '} UniformRead: 0 ReadMode: '文件' BlockSize: Inf PreviewFcn: @load Su金宝apppportedOutputFormats:[“三种”“csv”“xlsx”“xls”“铺”“parq”“png”“jpg”“jpeg”“tif”“tiff”“wav”“flac”“ogg”“mp4”“m4a格式”]ReadFcn: @load AlternateFileSystemRoots: {}

第一个文件读取的数据存储,然后阅读第二个文件。

data1 =阅读(fds);data2 =阅读(fds);

同时读取所有文件的数据存储。

readall (fds);

初始化一个细胞数组来保存数据和计数器

dataarray =细胞(元素个数(fds.Files), 1);i = 1;

重置第一个文件的数据存储和读取文件一次,直到没有数据了。分配数据到数组中dataarray

重置(fds);hasdata (fds) dataarray{我}=阅读(fds);我=我+ 1;结束

您可以创建一个数据存储,读取大型MAT-file不一定适合在内存中。假设每个数组在大型MAT-file适合可用的内存,创建一个数据存储中的数据读取和处理三个步骤:

  1. 编写一个定制的阅读功能,从MAT-file读取一个数组。

  2. 设置的参数执行部分读取数据存储功能。

  3. 从MAT-file读取一个数组。

编写一个自定义函数,读取一个数组从MAT-file时刻。中描述的函数必须有一个签名@ReadFcn的观点FileDatastore。保存这个文件在您的工作目录或文件夹,在MATLAB的道路。对于这个示例,一个自定义函数load_variable包含在这里。

类型load_variable.m
函数(数据、变量做]= load_variable(文件名,变量)%如果变量列表为空,%从文件创建变量列表如果isempty(变量)变量= (- file,文件名);结束%从列表中加载一个变量的变量数据=加载(文件名、变量{1});%从列表中移除newly-read变量变量(1)= [];%继续下一个文件,如果这个文件完成阅读。做= isempty(变量);结束

创建和设置FileDatastore包含accidents.mat。指定要使用的数据存储参数“partialfile”读模式和load_variable随着定制阅读功能。

fds = fileDatastore (“accidents.mat”,“ReadMode”,“partialfile”,“ReadFcn”,@load_variable);

从文件读取前三个变量使用数据存储。该文件accidents.mat包含九个变量和每个调用返回一个变量。因此,前三个变量,调用read函数三次。

data =阅读(fds)
data =结构体字段:数据源:{3 x1细胞}
data =阅读(fds)
data =结构体字段:hwycols: 17
data =阅读(fds)
data =结构体字段:hwydata (51 x17双):

注意,示例文件accidents.mat很小,适合在内存中,但是你可以期待类似的结果大mat文件不符合在内存中。

提示

  • 使用子集洗牌功能上的FileDatastore对象,必须设置“ReadMode”“文件”

版本历史

介绍了R2016a