Hello all, I'm have some trouble developing an algorithm to read multiple files at once and store them in different matrices. Heres a little, but sufficient, description of the problem:
Say I have n files named i_p.CSV, where n is a large enough number to do this procedure manually and i is a number that goes from 1 to n. The file i_p.CSV is a csv file with three columns, so what I would end up have on MATLAB is a matrix called data_i, which would be a (m x 3) matrix, where m is also a very large number.
Any tips on how to proceed?

 採用された回答

dpb
dpb 2018 年 3 月 24 日

2 投票

d=dir('*_p.clv'); % dir struct of all pertinent .csv files
n=length(d); % how many there were
data=cell(1,n); % preallocate a cell array to hold results
for i=1:n
data(i)=csvread(d(i).name); % read each file
end
Now, iff every one of the n .csv files has the same number of rows you can convert to an array...
data=cell2mat(data);
If they aren't all the same length you'll have to augment the shorter to the length of the longest or truncate the longer to that of the shortest.

8 件のコメント

Jorge Mira Pérez
Jorge Mira Pérez 2018 年 4 月 6 日
dpb, it worked mate! Thanks a lot! Sorry for taking this long to answer I've been pretty busy. In case someone else tried this, for some reason I recommend you guys to add path before! Something like
addpath('/...')
Spresi
Spresi 2019 年 3 月 7 日
Hey there, I am having the same issue and I am not able to read all of the csv files.
The part of code that I dont get is:
data(i)=csvread(d(i).name);
what would "name" be in this case?
Thank you in advance..
dpb
dpb 2019 年 3 月 7 日
name is the filename field in the directory information structure returned by dir().
Each iteration thru the loop will return the next filename found and returned in struct d
Spresi
Spresi 2019 年 3 月 8 日
編集済み: Spresi 2019 年 3 月 8 日
I am still unable to read all my csv files. So here's my problem:
I have around 9000 folders named ACCEDE00000 to ACCEDE08999 and each of them contains multiple csv files, but I'm only interested in one specific csv file named frame_table1_final.csv for each of 9000 ACCEDE videos. So I tried:
d=dir('/ACCEDE*/frame_table1_final.csv');
n=length(d);
data=cell(1,n);
for i=1:n
data(i)=csvread(d(i).name);
end
The error I get:
Error using csvread (line 35)
File not found.
Error in emotionn (line 5)
data(i)=csvread(d(i).name);
P.S. I am willing to import them as numeric arrays. Each of the csv files has same number of columns but different number of rows.
Thank you again!
dpb
dpb 2019 年 3 月 8 日
Per the doc for dir() the filename is in .name; the folder/subdirectory name is in the .folder field.
If the file(s) are not in the working directory or on the matlabpath, you must fully-qualify them...
data(i)=csvread(fullfile(d(i).folder,d(i).name));
Yuvarajendra A Reddy
Yuvarajendra A Reddy 2020 年 2 月 14 日
Hey all.. I completely understand reading Multiple .csv files. But i have a different issue. When I'm reading these files one by one, I need to skip certain lines in the begininning ( whicjh i managed to do so by using 'HeaderLines' command) and a last line, specifically the last row. Could someone help me sort this out please..
dpb
dpb 2020 年 2 月 14 日
No truly practical way to skip the last line; simply delete it from the read array after reading the file.
Gershon Koral
Gershon Koral 2021 年 10 月 6 日
This answer is incorrect. The for loop should rather read:
data{i} = csvread(d(i).name);

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File Exchange で File Operations についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by