Lvm文件转csv文件,问题描述:一个大文件夹里面有很多小文件夹小文件夹里有很多.lvm的文件,编写一段matlab代码将lvm文件全部转化成csv文件,转化的csv文件保存在新的文件夹内其结构和文件名称都不变。
% 设置大文件夹路径和子文件夹名称
onefilepath = 'E:\office文件';
% 获取大文件夹内的所有文件和文件夹信息
folderInfo = dir(onefilepath);
% 筛选出所有的子文件夹名称
subFolderList = {folderInfo([folderInfo(:).isdir]).name};
subFolderList(ismember(subFolderList,{'.','..'})) = []; % 去除'.'和'..'文件夹
% 输出子文件夹名称列表
disp(subFolderList);
% 创建新文件夹,用于保存csv文件
csvonefilepath ='E:\office文件csv';
csv_folder = fullfile(csvonefilepath);
if ~exist(csv_folder, 'dir')
mkdir(csv_folder);
end
% 循环遍历所有子文件夹
for i = 1:length(subFolderList)
% 获取当前子文件夹路径
twofilepath = fullfile(onefilepath, subFolderList{i});
% 创建新文件夹,用于保存csv文件
csvtwofilepath = fullfile(csvonefilepath,subFolderList{i});
if ~exist(csvtwofilepath, 'dir')
mkdir(csvtwofilepath);
end
% 获取当前子文件夹中所有lvm文件的路径
lvm_files = dir(fullfile(twofilepath, '*.lvm'));
disp(lvm_files);
a=lvm_files(1);
for j = 1:length(lvm_files)
% 获取当前lvm文件路径 lvmfiles是一个结构体.name表示
lvm_file = fullfile(twofilepath, lvm_files(j).name);
% 读取lvm文件
data = importdata( lvm_file,'\t',23);
% 获取lvm文件名(去除扩展名)
[~, lvm_name, ~] = fileparts(lvm_file);
% 构造csv文件名
csv_name = [lvm_name '.csv'];
% 拼接csv文件路径
csv_file = fullfile(csvtwofilepath, csv_name);
% 将lvm文件转化为csv文件并保存
headers = strjoin(data.textdata(end-1,:), ',');
headers = regexprep(headers, '[^\w\s]', '');
headers = strsplit(headers, ' ');
datacsv = data.data(:,:);
datacsv(:, end+1) = NaN;
writetable(table(datacsv), csv_file, 'WriteVariableNames', false);
dlmwrite(csv_file, headers, '-append', 'delimiter', ',', 'precision', 16);
end
end
上述代码存在一定问题做了修改加上了标题行
% 设置大文件夹路径和子文件夹名称
onefilepath = 'E:\office文件';
% 获取大文件夹内的所有文件和文件夹信息
folderInfo = dir(onefilepath);
% 筛选出所有的子文件夹名称
subFolderList = {folderInfo([folderInfo(:).isdir]).name};
subFolderList(ismember(subFolderList,{'.','..'})) = []; % 去除'.'和'..'文件夹
% 输出子文件夹名称列表
disp(subFolderList);
% 创建新文件夹,用于保存csv文件
csvonefilepath ='E:\office文件';
csv_folder = fullfile(csvonefilepath);
if ~exist(csv_folder, 'dir')
mkdir(csv_folder);
end
% 循环遍历所有子文件夹
for i = 1:length(subFolderList)
% 获取当前子文件夹路径
twofilepath = fullfile(onefilepath, subFolderList{i});
% 创建新文件夹,用于保存csv文件
csvtwofilepath = fullfile(csvonefilepath,subFolderList{i});
if ~exist(csvtwofilepath, 'dir')
mkdir(csvtwofilepath);
end
% 获取当前子文件夹中所有lvm文件的路径
lvm_files = dir(fullfile(twofilepath, '*.lvm'));
disp(lvm_files);
a=lvm_files(1);
for j = 1:length(lvm_files)
% 获取当前lvm文件路径 lvmfiles是一个结构体.name表示
lvm_file = fullfile(twofilepath, lvm_files(j).name);
% 读取lvm文件
data = importdata( lvm_file,'\t',23);
% 获取lvm文件名(去除扩展名)
[~, lvm_name, ~] = fileparts(lvm_file);
% 构造csv文件名
csv_name = [lvm_name '.csv'];
% 拼接csv文件路径
csv_file = fullfile(csvtwofilepath, csv_name);
% 将lvm文件转化为csv文件并保存
% 获取数据和标题
headerLineCell = data.textdata(end, 1);
headerLine = headerLineCell{1};
headers = strsplit(headerLine,'\t');
%headers = headers(1:end-1);%shanchuzuihouyilie
datacsv = data.data(:,:);
datacsv = [data.data, nan(size(data.data,1),1)];
combinedData = [headers; num2cell(datacsv)];
fid = fopen(csv_file, 'w');
[nrows,ncols] = size(combinedData);
for row = 1:nrows
for col = 1:ncols
if isnumeric(combinedData{row,col})
fprintf(fid, '%f', combinedData{row,col});
else
fprintf(fid, '%s', combinedData{row,col});
end
if col < ncols
fprintf(fid, ',');
end
end
fprintf(fid, '\n');
end
fclose(fid);
end
end