MATLAB - читать файлы из каталога? - PullRequest
13 голосов
/ 10 июня 2010

Я хочу прочитать файлы из каталога и итеративно выполнить операцию с каждым файлом. Эта операция не требует изменения файла.

Я понимаю, что для этого я должен использовать цикл 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 ]

21 голосов
/ 10 июня 2010

Сначала получите список всех файлов, соответствующих вашим критериям:
(в данном случае pdb файлы в C: \ Мои документы \ MATLAB )

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

Затем прочитайте в файле следующее:
(Здесь i может варьироваться от 1 до количества файлов)

data = load(matfiles(i).name)

Повторяйте это, пока не прочитаете все свои файлы.


A более простая альтернатива если вы можете переименовать ваши файлы выглядит следующим образом: -

Сначала сохраните требование. файлы как 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
2 голосов
/ 09 апреля 2013

Я копирую это из ответов Yahoo! У меня это сработало

% 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...