MATLAB - 从目录中读取文件?

时间:2010-06-10 10:04:17

标签: matlab file directory

我希望从目录中读取文件,并在每个文件上迭代执行操作。此操作不需要更改文件。

我知道我应该为此使用for循环。到目前为止,我尝试过:

FILES = ls('path\to\folder');

for i = 1:size(FILES, 1);
    STRU = pdbread(FILES{i});
end

这里返回的错误告诉我,一个新手,使用ls()列出目录不会将内容分配给数据结构。

其次,我尝试创建一个文件,在每行上包含文件的路径,例如

C:\Documents and Settings\My Documents\MATLAB\asd.pdb
C:\Documents and Settings\My Documents\MATLAB\asd.pdb

然后我使用以下代码阅读此文件:

fid = fopen('paths_to_files.txt');
FILES = textscan(fid, '%s');
FILES = FILES{1};
fclose(fid);

此代码读取文件但创建了一个换行符中存在空格的换行符,即

'C:\Documents'
'and'
'Setting\My'
'Documents\MATLAB\asd.pdb'

最终,我打算使用for循环

for i = 1:size(FILES, 1)
    PDB = pdbread(char(FILES{i}));

读取每个文件,但pdbread()会抛出错误,声明文件格式不正确或不存在。

这是因为读入路径文件时路径的换行符分离?

任何大大适用的帮助或建议。

谢谢, S: - )

2 个答案:

答案 0 :(得分:21)

首先获取符合条件的所有文件的列表:
(在本例中 C:\ My Documents \ MATLAB 中的 pdb 文件)

matfiles = dir(fullfile('C:', 'My Documents', 'MATLAB', '*.pdb'))

然后按如下方式读入文件:
(此处 i 可以从1到文件数量不等)

data = load(matfiles(i).name)

重复此操作,直到您阅读完所有文件为止。


如果重命名文件更简单的替代如下: -

首先保存reqd。文件为1.pdb,2.pdb,3.pdb,...等。

然后在Matlab中迭代读取它们的代码如下:

for i = 1:n
    str = strcat('C:\My Documents\MATLAB', int2str(i),'.pdb'); 
    data = load(matfiles(i).name);

% use our logic here  
% before proceeding to the next file

end

答案 1 :(得分:2)

我从雅虎的答案中复制这个!它对我有用

% copy-paste the following into your command window or your function

% first, you have to find the folder
folder = uigetdir; % check the help for uigetdir to see how to specify a starting path, which makes your life easier

% get the names of all files. dirListing is a struct array. 
dirListing = dir(folder);

% loop through the files and open. Note that dir also lists the directories, so you have to check for them.
for d = 1:length(dirListing)
    if ~dirListing(1).isdir
        fileName = fullfile(folder,dirListing(d).name); % use full path because the folder may not be the active path

        % open your file here 
        fopen(fileName)

        % do something

    end % if-clause
end % for-loop