Borrar filtros
Borrar filtros

How to open csv files as separate numeric matrices from a certain directory?

1 visualización (últimos 30 días)
I have many csv files in a folder and I need to open all as separate numeric matrices in workspace.
  1 comentario
Stephen23
Stephen23 el 25 de Feb. de 2022
Editada: Stephen23 el 25 de Feb. de 2022
Don't make your code slow, complex, and inefficient with dynamically named variables:
The content of a cell array (as the accepted answer shows) are already separated arrays.

Iniciar sesión para comentar.

Respuesta aceptada

Voss
Voss el 13 de Feb. de 2022
% csv_location = 'path\to\your\csv\files';
csv_location = '';
files = dir(fullfile(csv_location,'*.csv'));
for ii = 1:numel(files)
files(ii).data = readmatrix(fullfile(csv_location,files(ii).name));
end
Now the matrices are in the 'data' fields of the 'files' stucture array. You can access them like:
files(1).data
ans = 2×3
1 2 3 4 5 6
files(2).data
ans = 3×4
1 2 3 4 5 6 7 8 9 10 11 12
If you really want to make separate matrix variables in the workspace, you can do this instead:
files = dir(fullfile(csv_location,'*.csv'));
for ii = 1:numel(files)
assignin('base',sprintf('matrix_%d',ii),readmatrix(fullfile(csv_location,files(ii).name)));
end
whos('matrix_*')
Name Size Bytes Class Attributes matrix_1 2x3 48 double matrix_2 3x4 96 double
  7 comentarios
Mustafa Sobhy
Mustafa Sobhy el 25 de Feb. de 2022
Thanks so much
Can I import the second column only from all files using this command?
readmatrix(path2mat,delimitedTextImportOptions('DataLines',[Inf,1]))
Image Analyst
Image Analyst el 25 de Feb. de 2022
@Mustafa Sobhy readmatrix() has a 'Range' option where you can specify the second column.

Iniciar sesión para comentar.

Más respuestas (1)

Image Analyst
Image Analyst el 13 de Feb. de 2022
Editada: Image Analyst el 13 de Feb. de 2022
See the FAQ:
% Specify the folder where the files live.
myFolder = pwd; % or 'C:\Users\yourUserName\Documents\My Pictures'; or wherever they are
% Check to make sure that folder actually exists. Warn user if it doesn't.
if ~isfolder(myFolder)
errorMessage = sprintf('Error: The following folder does not exist:\n%s\nPlease specify a new folder.', myFolder);
uiwait(warndlg(errorMessage));
myFolder = uigetdir(); % Ask for a new one.
if myFolder == 0
% User clicked Cancel
return;
end
end
% Get a list of all files in the folder with the desired file name pattern.
filePattern = fullfile(myFolder, '*.csv'); % Change to whatever pattern you need.
theFiles = dir(filePattern);
for k = 1 : length(theFiles)
baseFileName = theFiles(k).name;
fullFileName = fullfile(theFiles(k).folder, baseFileName);
fprintf(1, 'Now reading %s\n', fullFileName);
% Now do whatever you want with this file name,
% such as reading it in as an array with csvread() or readmatrix() or importdata().
data = imread(fullFileName);
end
By the way, you should process each set of data inside the loop. If you will need the data later, you can put it into a multidimensional array or a cell array.
It's a very bad idea to give each data set its own unique name. Why? See the FAQ:

Categorías

Más información sobre Scripts en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by