is there a better way of accessing the csv files from each folders in the path below?
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
muhammad choudhry
el 5 de En. de 2022
Comentada: muhammad choudhry
el 7 de En. de 2022
Hi,
I am using the code below to plot the data but the problem is code is not efficient enough to save me more time. I have 4 paths with csv in them and each csv will go from timestamp 000000.csv to 000100.csv in each folder and I need to plot the data from each csv from each folderwith the same time stamp. I can goahead and do the same way in the code below but is there any better way of analysing the data then what I have below.
files = { 'F:\3-PIV_Experimental_Data\Outlet_110\Data_LaserSheet_D\Data_PIV\Data_Vector\Run 13-56-31.Adaptive PIV.6tvk0mbp\Export.6tvk0mbp.000000.csv'; ...
'F:\3-PIV_Experimental_Data\Outlet_110\Data_LaserSheet_B\Data_PIV\Data_Vector\Run 17-19-03.Adaptive PIV.6ul4ynyv\Export.6ul4ynyv.000000.csv'; ...
'F:\3-PIV_Experimental_Data\Outlet_110\Data_LaserSheet_B\Data_PIV\Data_Vector\Run 17-19-03.Adaptive PIV.6ul4ynyv\Export.6ul4ynyv.000000.csv'; ...
'F:\3-PIV_Experimental_Data\Outlet_110\Data_LaserSheet_A\Data_PIV\Data_Vector\Run 12-45-51.Adaptive PIV.6tskdx6a\Export.6tskdx6a.000000.csv'};
for i = 1:numel(files)
a = readtable(files{i});
X = a{:,5}/1000;
Y = a{:,6}/1000;
U = a{:,9};
V = a{:,10};
quiver(X, Y, U, V, 10);
axis tight
hold on
end
0 comentarios
Respuesta aceptada
Walter Roberson
el 5 de En. de 2022
prefixes = { 'F:\3-PIV_Experimental_Data\Outlet_110\Data_LaserSheet_D\Data_PIV\Data_Vector\Run 13-56-31.Adaptive PIV.6tvk0mbp\Export.6tvk0mbp.'; ...
'F:\3-PIV_Experimental_Data\Outlet_110\Data_LaserSheet_B\Data_PIV\Data_Vector\Run 17-19-03.Adaptive PIV.6ul4ynyv\Export.6ul4ynyv.'; ...
'F:\3-PIV_Experimental_Data\Outlet_110\Data_LaserSheet_B\Data_PIV\Data_Vector\Run 17-19-03.Adaptive PIV.6ul4ynyv\Export.6ul4ynyv.'; ...
'F:\3-PIV_Experimental_Data\Outlet_110\Data_LaserSheet_A\Data_PIV\Data_Vector\Run 12-45-51.Adaptive PIV.6tskdx6a\Export.6tskdx6a.'};
ndir = length(prefixes);
filenames = cell(ndir, 1);
for K = 1:ndir
dinfo = dir( [prefixes{K} '*.csv']);
filenames{K} = fullfile({dinfo.folder}, {dinfo.name});
end
numfiles = cellfun(@length, filenames);
assert( ~any(diff(numfiles), 'folders not all same size');
numfiles = numfiles(1);
for K = 1 : numfiles
filename_subset = cellfun(@(List) List(K), filenames);
for d = 1 : ndir
thisfile = filename_subset{d};
a = readtable(thisfile);
some stuff here
end
end
The for K loop at the bottom is executed once for each timestamp. Inside that for d loops through pulling out corresponding files from each of the directories. You do whatever is appropriate for each of them "to plot the data from each csv from each folderwith the same time stamp."
5 comentarios
Walter Roberson
el 6 de En. de 2022
Is it possible to plot the graph for each time stamp at a moment I am getting all the data on the same graph and then matlab crashing.
The answer would seem to be NO: you are plotting all the data, and you are getting a crash, which suggests that you are running out of memory trying to do the plots.
You could consider creating a new figure for each time stamp, but that would get you 101 different figures, if I read your Question correctly, and 101 different figures is going to be hard on your system.
Perhaps you could save each one to a file as an image, using exportgraphics() ? Or perhaps you could use VideoWriter to create an animation ?
You have 404 different quiverplots... not clear what you expect the result to look like.
It is not even clear to me what you expect the result to look like to overlay 4 of them at one time.
Más respuestas (1)
Image Analyst
el 5 de En. de 2022
How about getting all the filenames and looping over them.
topLevelFolder = 'F:\3-PIV_Experimental_Data\Outlet_110\';
filePattern = fullfile(topLevelFolder, '**/Export*.csv'); % The ** will make it recurse into subfolders.
fileList = dir(filePattern);
for k = 1 : length(fileList)
thisFolder = fileList(k).folder;
thisBaseFileName = fileList(k).name;
fullFileName = fullfile(thisFolder, thisBaseFileName);
data = readtable(fullFileName);
end
You might have to do some further parsing if you want to process subsets of the entire list in some particular order.
0 comentarios
Ver también
Categorías
Más información sobre Data Import and Analysis en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!