fileDatastore
带有自定义文件阅读器的数据存储
描述
使用一个FileDatastore
对象来管理大型自定义格式文件集合,这些集合不一定适合内存,或者当大型自定义格式文件不适合内存时。您可以创建FileDatastore
对象使用fileDatastore
函数,指定其属性,然后使用对象函数导入和处理数据。
创建
描述
输入参数
位置
- - - - - -要包含在数据存储中的文件或文件夹
文件集
对象|文件路径|DsFileSet
对象
包含在数据存储中的文件或文件夹,指定为文件集
对象作为文件路径,或作为DsFileSet
对象。
文件集
object -可以指定位置
作为一个文件集
对象。指定位置为文件集
对象相比于指定路径或DsFileSet
对象。有关更多信息,请参见matlab.io.datastore.FileSet
.文件路径—您可以将单个文件路径指定为字符向量或字符串标量。您可以将多个文件路径指定为字符向量的单元格数组或字符串数组。
DsFileSet
object -可以指定DsFileSet
对象。有关更多信息,请参见matlab.io.datastore.DsFileSet
.
文件或文件夹可以是本地的或远程的:
本地文件或文件夹—指定文件或文件夹的本地路径。如果文件不在当前文件夹中,则指定完整路径或相对路径。指定文件夹的子文件夹中的文件不会自动包含在数据存储中。当指定本地路径时,可以使用通配符*。此字符指定数据存储包括所有匹配文件或匹配文件夹中的所有文件。
远程文件或文件夹——指定远程文件或文件夹的完整路径作为格式的统一资源定位符(URL)
hdfs: / / /
.有关更多信息,请参见使用远程数据.path_to_file
指定文件夹时,数据存储只包括支持的文件格式的文件,而忽略任何其他格式的文件。万博1manbetx若要指定要包含在数据存储中的自定义文件扩展名列表,请参见FileExtensions
财产。
例子:“file1.ext”
例子:“. . / dir /数据/ file1.ext”
例子:{“C: \ dir \ data \ file1.exts”,“C: \ dir \ data \ file2.extx”}
例子:“C: \ dir \ data \ * . ext "
@fcn
- - - - - -读取文件数据的函数
函数处理
读取文件数据的函数,指定为函数句柄。
由函数句柄表示的函数的签名@fcn
的值ReadMode
.读取文件数据的函数必须确认这些签名中的一个。
|
|
---|---|
“文件” (默认) |
函数必须有这样的签名: 函数data = MyReadFcn(文件名)…结束
|
“partialfile” |
函数必须有这样的签名: function [data,userdata,done] = MyReadFcn(filename,userdata)…结束
|
“字节” |
函数必须有这样的签名: 函数data = MyReadFcn(文件名,偏移量,大小)…结束
的 |
中指定的值@fcn
的值ReadFcn财产。
例子:@customreader
数据类型:function_handle
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。
在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字
在报价。
例子:fds = fileDatastore(“C: \ dir \数据”,“FileExtensions”{“开头”、“.extx”})
IncludeSubfolders
- - - - - -子文件夹包含标志
真正的
或假
|0或1
子文件夹包含标志,指定为逗号分隔的对,由“IncludeSubfolders”
而且真正的
,假
、0或1。指定真正的
在每个文件夹或中包含所有文件和子文件夹假
只包括每个文件夹中的文件。
如果您没有指定“IncludeSubfolders”
,则默认值为假
.
例子:“IncludeSubfolders”,真的
数据类型:逻辑
|双
FileExtensions
- - - - - -自定义格式文件扩展名
特征向量|字符向量的单元格数组|字符串标量|字符串数组
自定义格式文件扩展名,指定为由逗号分隔的对组成“FileExtensions”
字符向量,字符向量的单元格数组,字符串标量,或者字符串数组。
指定文件扩展名时,fileDatastore
函数仅为具有指定扩展名的文件创建数据存储对象。您还可以通过指定为没有任何扩展名的文件创建数据存储“FileExtensions”
作为一个空的字符向量,”
.如果您没有指定“FileExtensions”
,然后fileDatastore
自动包含文件夹中的所有文件。
例子:“FileExtensions”、“
例子:“FileExtensions”、“开头”
例子:“FileExtensions”(“开头”、“.extx”)
数据类型:字符
|细胞
|字符串
PreviewFcn
- - - - - -函数预览输入数据
@ReadFcn
(默认)|函数处理
函数预览作为函数句柄指定的输入数据。
如果没有指定预览函数,FileDatastore
中指定的值@ReadFcn
作为默认的预览功能。或者,您可以为数据指定自己的自定义预览函数。
@ReadFcn
(默认)-使用ReadFcn
样本FileDatastore
数据。此选项可能导致性能变慢高
建设。函数处理
-使用您的自定义预览功能FileDatastore
而且高
构造对输入数据进行采样。使用PreviewFcn
提供一个函数,只读取预览和高构造所需的输入数据的最小部分。
指定的函数。PreviewFcn
返回的值必须与ReadFcn
的回报。
数据类型:function_handle
ReadMode
- - - - - -要读取的文件的一部分
“文件”
(默认)|“partialfile”
|“字节”
要读取的文件的一部分,指定为“文件”
,“partialfile”
,或“字节”
.
“文件” (默认) |
使用读模式 根据您的自定义读取函数,文件数据存储在每次调用时读取完整的文件 |
“partialfile” |
使用读模式 方法时,文件数据存储只读取文件的一部分,这取决于您的自定义读取函数 在 |
“字节” |
使用读模式
根据您的自定义读取函数,读取文件数据存储 |
使用子集
而且洗牌
函数在FileDatastore
对象,必须设置“ReadMode”
来“文件”
.
数据类型:字符
|字符串
BlockSize
- - - - - -要读取的字节数
正整数
每次读取的字节数读
操作,指定为正整数。
确保您可以在多个并行MATLAB中分布文件的多个块®工人,指定BlockSize
作为大于的正整数131072
个字节(128
千字节)。
指定或改变…的值BlockSize
,你必须先设置ReadMode
来“字节”
.FileDatastore
的默认值BlockSize
中指定的值ReadMode
.
如果
ReadMode
是“文件”
或“partialfile”
,然后FileDatastore
设置默认值BlockSize
来正
.如果
ReadMode
是“字节”
,然后FileDatastore
设置默认值BlockSize
来128
兆字节。
AlternateFileSystemRoots
- - - - - -可选文件系统根路径
字符串向量|单元阵列
可选文件系统根路径,指定为由“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
对象。
数据类型:细胞
ReadFcn
- - - - - -读取文件数据的函数
函数处理
UniformRead
- - - - - -垂直连接标志
假
(默认)|真正的
此属性是只读的。
垂直可连接的标志,指定为逻辑真正的
或假
.属性时指定此属性的值FileDatastore
对象。
真正的 |
的多次读取 当
|
假 (默认) |
的多次读取 当
|
例子:fds = fileDatastore(location,"ReadFcn",@load,"UniformRead",true)
数据类型:逻辑
|双
万博1manbetxSupportedOutputFormats
- - - - - -支持写入的格式列表万博1manbetx
行向量
对象的功能
hasdata |
确定是否有数据可以读取 |
numpartitions |
数据存储分区数 |
分区 |
对数据存储进行分区 |
预览 |
预览数据存储中的数据子集 |
读 |
读取数据存储中的数据 |
readall |
读取数据存储中的所有数据 |
writeall |
将数据存储写入文件 |
重置 |
将数据存储重置为初始状态 |
变换 |
变换数据存储 |
结合 |
组合来自多个数据存储的数据 |
isPartitionable |
确定数据存储是否可分区 |
isShuffleable |
确定数据存储是否可洗牌 |
洗牌 |
打乱数据存储中的所有数据 |
子集 |
创建数据存储或文件集的子集 |
例子
创建FileDatastore对象
使用FileSet对象或文件路径创建fileDatastore对象。
创建一个FileSet对象。创建一个fileDatastore对象。
fs = matlab.io.datastore.FileSet(“airlinesmall.parquet”);fds = fileDatastore(fs,“ReadFcn”@load)
fds =FileDatastore属性:文件:{`…\matlab\toolbox\matlab\demos\airlinesmall。parquet'}文件夹:{'…\matlab\toolbox\matlab\demos `} UniformRead: 0 ReadMode: ` file ` BlockSize: Inf PreviewFcn: @loa万博1manbetxd SupportedOutputFormats: ["txt" "csv" "xlsx" "xls" "parquet" "parq" "png" "jpg" "jpeg" "tif" "tiff" "wav" "flac" "ogg" "mp4" "m4a"] ReadFcn: @load AlternateFileSystemRoots: {}
或者,您可以使用文件路径来创建您的fileDatastore对象。
fds = fileDatastore(“airlinesmall.parquet”,“ReadFcn”, @load);
读取MAT-Files的数据存储
创建一个包含所有.mat
MATLAB®中的文件演示
文件夹,指定负载
函数读取文件数据。
fds = fileDatastore(fullfile(matlabroot,“工具箱”,“matlab”,“演示”),“ReadFcn”@load,“FileExtensions”,“.mat”)
fds =FileDatastore属性:文件:{'…\matlab\toolbox\matlab\demos\accidents.mat';’……\ matlab \ matlab工具箱\ \ demo \ airfoil.mat”;“……\ matlab \ matlab工具箱\ \ demo \ airlineResults。垫”……和38个}文件夹:{'…\matlab\toolbox\matlab\demos `} UniformRead: 0 ReadMode: ` file ` BlockSize: Inf PreviewFcn: @loa万博1manbetxd SupportedOutputFormats: ["txt" "csv" "xlsx" "xls" "parquet" "parq" "png" "jpg" "jpeg" "tif" "tiff" "wav" "flac" "ogg" "mp4" "m4a"] ReadFcn: @load AlternateFileSystemRoots: {}
读取数据存储中的第一个文件,然后读取第二个文件。
Data1 = read(fds);Data2 = read(fds);
同时读取数据存储中的所有文件。
readall (fds);
初始化一个单元格数组以保存数据和计数器我
.
dataarray = cell(数字(fds.Files), 1);I = 1;
将数据存储重置到第一个文件,并一次读取一个文件,直到没有剩余数据。将数据分配给数组dataarray
.
重置(fds);而Hasdata (fds) dataarray{i} = read(fds);I = I +1;结束
从大的mat文件中一次读取一个数组
您可以创建一个数据存储来从不一定适合内存的大型mat文件中读取数据。假设大型mat文件中的每个数组都适合可用内存,创建一个数据存储来读取和处理数据,分为三个步骤:
编写一个自定义读取函数,每次从mat文件中读取一个数组。
设置数据存储函数的参数以执行部分读取。
每次从mat文件中读取一个数组。
编写一个自定义函数,每次从mat文件中读取一个数组。方法中描述的函数必须具有签名@ReadFcn
的观点FileDatastore
.将此文件保存在工作文件夹或MATLAB路径下的文件夹中。对于本例,是一个自定义函数load_variable
包含在这里。
类型load_variable.m
function [data,variables,done] = load_variable(filename,variables) %如果变量列表为空,%从文件中创建变量列表If isempty(variables)变量= who('-file', filename);从变量列表中加载变量data = Load(文件名,变量{1});从变量列表中删除新读取的变量(1)= [];如果该文件已读取,则转移到下一个文件。Done = isempty(变量);结束
创建并设置FileDatastore
包含accidents.mat
.指定要使用的数据存储参数“partialfile”
作为读模式和load_variable
作为自定义读取功能。
fds = fileDatastore(“accidents.mat”,“ReadMode”,“partialfile”,“ReadFcn”, @load_variable);
使用数据存储从文件中读取前三个变量。该文件accidents.mat
包含9个变量和对读
返回一个变量。因此,要获得前三个变量,需要调用read函数三次。
Data = read(fds)
data =带字段的结构:数据来源:{3x1 cell}
Data = read(fds)
data =带字段的结构:hwycols: 17
Data = read(fds)
data =带字段的结构:Hwydata: [51x17 double]
请注意示例文件accidents.mat
是较小且适合内存的,但是对于不适合内存的大型mat文件,您可以预期类似的结果。
提示
使用
子集
而且洗牌
函数在FileDatastore
对象,必须设置“ReadMode”
来“文件”
.
版本历史
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。万博1manbetx
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。