una txt todos todas mover los leer las imagenes extraer directorio datos como carpeta cargar cambiar archivos archivo matlab file recursion file-io directory

txt - leer archivos de una carpeta matlab



¿Cómo obtener todos los archivos bajo un directorio específico en MATLAB? (8)

Con poca modificación, pero con un enfoque casi similar para obtener la ruta completa del archivo de cada subcarpeta

dataFolderPath = ''UCR_TS_Archive_2015/''; dirData = dir(dataFolderPath); %# Get the data for the current directory dirIndex = [dirData.isdir]; %# Find the index for directories fileList = {dirData(~dirIndex).name}''; %''# Get a list of the files if ~isempty(fileList) fileList = cellfun(@(x) fullfile(dataFolderPath,x),... %# Prepend path to files fileList,''UniformOutput'',false); end subDirs = {dirData(dirIndex).name}; %# Get a list of the subdirectories validIndex = ~ismember(subDirs,{''.'',''..''}); %# Find index of subdirectories %# that are not ''.'' or ''..'' for iDir = find(validIndex) %# Loop over valid subdirectories nextDir = fullfile(dataFolderPath,subDirs{iDir}); %# Get the subdirectory path getAllFiles = dir(nextDir); for k = 1:1:size(getAllFiles,1) validFileIndex = ~ismember(getAllFiles(k,1).name,{''.'',''..''}); if(validFileIndex) filePathComplete = fullfile(nextDir,getAllFiles(k,1).name); fprintf(''The Complete File Path: %s/n'', filePathComplete); end end end

Necesito obtener todos esos archivos en D:/dic y recorrerlos para procesarlos individualmente.

¿MATLAB admite este tipo de operaciones?

Se puede hacer en otros scripts como PHP, Python ...


Está buscando un dir para devolver el contenido del directorio.

Para recorrer los resultados, simplemente puede hacer lo siguiente:

dirlist = dir(''.''); for i = 1:length(dirlist) dirlist(i) end

Esto debería darle salida en el siguiente formato, por ejemplo:

name: ''my_file'' date: ''01-Jan-2010 12:00:00'' bytes: 56 isdir: 0 datenum: []


Esta es una función práctica para obtener nombres de archivos, con el formato especificado (generalmente .mat ) en una carpeta raíz.

function filenames = getFilenames(rootDir, format) % Get filenames with specified `format` in given `foler` % % Parameters % ---------- % - rootDir: char vector % Target folder % - format: char vector = ''mat'' % File foramt % default values if ~exist(''format'', ''var'') format = ''mat''; end format = [''*.'', format]; filenames = dir(fullfile(rootDir, format)); filenames = arrayfun(... @(x) fullfile(x.folder, x.name), ... filenames, ... ''UniformOutput'', false ... ); end

En tu caso, puedes usar el siguiente fragmento :)

filenames = getFilenames(''D:/dic/**''); for i = 1:numel(filenames) filename = filenames{i}; % do your job! end


Esta respuesta no responde directamente la pregunta, pero puede ser una buena solución fuera de la caja.

Volví a subir la solución de gnovice, pero quiero ofrecer otra solución: use el comando dependiente del sistema de su sistema operativo:

tic asdfList = getAllFiles(''../TIMIT_FULL/train''); toc % Elapsed time is 19.066170 seconds. tic [status,cmdout] = system(''find ../TIMIT_FULL/train/ -iname "*.wav"''); C = strsplit(strtrim(cmdout)); toc % Elapsed time is 0.603163 seconds.

Positivo:

  • Muy rápido (en mi caso para una base de datos de 18000 archivos en Linux).
  • Puede usar soluciones bien probadas.
  • No necesita aprender o reinventar una nueva sintaxis para seleccionar, por ejemplo, archivos *.wav .

Negativo:

  • Usted no es independiente del sistema.
  • Confías en una sola cadena que puede ser difícil de analizar.

No conozco un método de función única para esto, pero puede usar genpath para genpath una lista de subdirectorios solamente . Esta lista se devuelve como una cadena de directorios delimitada por punto y coma, por lo que deberá separarla mediante strread, es decir,

dirlist = strread(genpath(''/path/of/directory''),''%s'',''delimiter'','';'')

Si no desea incluir el directorio dado, elimine la primera entrada de dirlist , es decir, dirlist(1)=[]; ya que siempre es la primera entrada.

Luego obtenga la lista de archivos en cada directorio con un directorio en bucle.

filenamelist=[]; for d=1:length(dirlist) % keep only filenames filelist=dir(dirlist{d}); filelist={filelist.name}; % remove ''.'' and ''..'' entries filelist([strmatch(''.'',filelist,''exact'');strmatch(''..'',filelist,''exact''))=[]; % or to ignore all hidden files, use filelist(strmatch(''.'',filelist))=[]; % prepend directory name to each filename entry, separated by filesep* for f=1:length(filelist) filelist{f}=[dirlist{d} filesep filelist{f}]; end filenamelist=[filenamelist filelist]; end

filesep devuelve el separador de directorio para la plataforma en la que se ejecuta MATLAB.

Esto le da una lista de nombres de archivos con rutas completas en la lista de nombres de archivos de la matriz de celdas. No es la mejor solución, lo sé.


Puedes usar regexp o strcmp para eliminar . y .. O podría usar el campo isdir si solo quiere archivos en el directorio, no carpetas.

list=dir(pwd); %get info of files/folders in current directory isfile=~[list.isdir]; %determine index of files vs folders filenames={list(isfile).name}; %create cell array of file names

o combine las dos últimas líneas:

filenames={list(~[list.isdir]).name};

Para una lista de carpetas en el directorio excluyendo. y ...

dirnames={list([list.isdir]).name}; dirnames=dirnames(~(strcmp(''.'',dirnames)|strcmp(''..'',dirnames)));

A partir de este punto, debe poder arrojar el código en un bucle for anidado y continuar buscando cada subcarpeta hasta que sus dirnames devuelvan una celda vacía para cada subdirectorio.


Utilicé el código mencionado en esta gran respuesta y lo amplié para admitir 2 parámetros adicionales que necesitaba en mi caso. Los parámetros son extensiones de archivo para filtrar y un indicador que indica si concatenar la ruta completa al nombre del archivo o no.

Espero que sea lo suficientemente claro y que alguien lo encuentre beneficioso.

function fileList = getAllFiles(dirName, fileExtension, appendFullPath) dirData = dir([dirName ''/'' fileExtension]); %# Get the data for the current directory dirWithSubFolders = dir(dirName); dirIndex = [dirWithSubFolders.isdir]; %# Find the index for directories fileList = {dirData.name}''; %''# Get a list of the files if ~isempty(fileList) if appendFullPath fileList = cellfun(@(x) fullfile(dirName,x),... %# Prepend path to files fileList,''UniformOutput'',false); end end subDirs = {dirWithSubFolders(dirIndex).name}; %# Get a list of the subdirectories validIndex = ~ismember(subDirs,{''.'',''..''}); %# Find index of subdirectories %# that are not ''.'' or ''..'' for iDir = find(validIndex) %# Loop over valid subdirectories nextDir = fullfile(dirName,subDirs{iDir}); %# Get the subdirectory path fileList = [fileList; getAllFiles(nextDir, fileExtension, appendFullPath)]; %# Recursively call getAllFiles end end

Ejemplo para ejecutar el código:

fileList = getAllFiles(dirName, ''*.xml'', 0); %#0 is false obviously


Actualización: Dado que esta publicación es bastante antigua, y he modificado mucho esta utilidad para mi propio uso durante ese tiempo, pensé que debería publicar una nueva versión. Mi código más reciente se puede encontrar en The MathWorks File Exchange : dirPlus.m . También puede obtener la fuente de GitHub .

Hice una serie de mejoras. Ahora le da opciones para anteponer la ruta completa o devolver solo el nombre del archivo (incorporado de Doresoom y Oz Radiano ) y aplicar un patrón de expresión regular a los nombres de los archivos (incorporado desde Peter D ). Además, agregué la capacidad de aplicar una función de validación a cada archivo, lo que le permite seleccionarlos según criterios distintos a solo sus nombres (es decir, tamaño del archivo, contenido, fecha de creación, etc.).

NOTA: En las versiones más nuevas de MATLAB (R2016b y posterior), ¡la función dir tiene capacidades de búsqueda recursiva! De modo que puede hacer esto para obtener una lista de todos los archivos *.m en todas las subcarpetas de la carpeta actual:

dirData = dir(''**/*.m'');

Código antiguo: (para la posteridad)

Aquí hay una función que busca recursivamente a través de todos los subdirectorios de un directorio determinado, recopilando una lista de todos los nombres de archivos que encuentra:

function fileList = getAllFiles(dirName) dirData = dir(dirName); %# Get the data for the current directory dirIndex = [dirData.isdir]; %# Find the index for directories fileList = {dirData(~dirIndex).name}''; %''# Get a list of the files if ~isempty(fileList) fileList = cellfun(@(x) fullfile(dirName,x),... %# Prepend path to files fileList,''UniformOutput'',false); end subDirs = {dirData(dirIndex).name}; %# Get a list of the subdirectories validIndex = ~ismember(subDirs,{''.'',''..''}); %# Find index of subdirectories %# that are not ''.'' or ''..'' for iDir = find(validIndex) %# Loop over valid subdirectories nextDir = fullfile(dirName,subDirs{iDir}); %# Get the subdirectory path fileList = [fileList; getAllFiles(nextDir)]; %# Recursively call getAllFiles end end

Después de guardar la función anterior en algún lugar de su ruta MATLAB, puede llamarla de la siguiente manera:

fileList = getAllFiles(''D:/dic'');