.lvm文件转.csv文件

该代码段使用MATLAB实现了一个功能,将大文件夹中的所有LVM文件转换为CSV格式,并保持原有的文件夹结构。它首先遍历指定路径下的所有子文件夹,然后在每个子文件夹中查找.LVM文件,读取这些文件,提取数据和标题行,最后将数据保存到对应的CSV文件中。
摘要由CSDN通过智能技术生成

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

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值