MATLAB nombre de carpeta de lectura por lotes, nombre de archivo, datos de archivo


1. Introducción

Cuando estudiamos algunos temas, a menudo nos encontramos con una gran cantidad de datos que deben procesarse. Cuando hay una gran cantidad de archivos de datos, necesitamos leer los datos en los archivos en lotes y convertirlos en matrices para el cálculo.
En la actualidad, los datos que quiero procesar son los datos de un mes para un proyecto, como se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí
Aquí, primero cree una carpeta llamada 1st en el directorio "D: / September / 1st" y genere 100 en la carpeta .Un archivo txt.

new_folder= 'D:/9月/1日'; % new_folder 保存要创建的文件夹,是绝对路径+文件夹名称
mkdir(new_folder);  % mkdir()函数创建文件夹
cd(new_folder)
for i=1:100  
  eval(['fid=fopen(''a',num2str(i),'.txt''',',','''a+''',');'])%写入文件路径
  fprintf(fid,'%.4f\r\n',rand(10,1)); 
  fclose(fid);
end

Genera 100 archivos txt . Como se muestra abajo:
Generar archivo txt


En segundo lugar, el uso de la función eval

Este artículo utiliza ampliamente la función eval y aquí hay una introducción a la función eval. La función eval puede calcular la cadena generada o la expresión numérica.
eval (expresión) calcula el código MATLAB en la expresión de cadena. Si usa eval en funciones anónimas, funciones anidadas o funciones que contienen funciones anidadas, la expresión de evaluación no puede crear variables.
El formato utilizado es:
[salida1, ..., salidaN] = eval (expresión) La salida de la expresión se almacena en la variable especificada.

eval(['fid=fopen(''a',num2str(i),'.txt''',',','''a+''',');'])

El primer signo 'de los dos' representa el carácter de escape, y el segundo signo 'de los dos signos' es el signo 'en el comando. Al usar eval, solo necesita escribir la oración que desea expresar primero, y luego úselo El signo 'se divide en una cadena de segmentos. Tenga en cuenta que el' mencionado anteriormente 'se puede utilizar como carácter de escape.
El código de muestra es el siguiente:

eval(['1+1'])

función eval


Tres archivos de lectura por lotes

1. Leer función de subcarpeta

el código se muestra a continuación:

function [SubFolders] = GetFolders(ParentFolder)
SubFolderNames = dir(ParentFolder);
for i=1:length(SubFolderNames)
        if( isequal( SubFolderNames( i ).name, '.' )||...
        isequal( SubFolderNames( i ).name, '..')||...
        ~SubFolderNames( i ).isdir) % 如果不是目录则跳过
            continue;
        end
        SubFolder(i).SubFolderName = fullfile( ParentFolder, SubFolderNames( i ).name );
end
temp = {
    
    SubFolder.SubFolderName};
idx = cellfun(@(x)~isempty(x),temp,'UniformOutput',true); % 利用cellfun函数得到元胞数组中所有非空元素的下标
SubFolders = temp(idx);
end

La función de esta función es obtener la ruta de todas las subcarpetas de la carpeta principal. La entrada de la función es ParentFolder, que es la ruta de la carpeta principal, por ejemplo: La salida de la función ' D

: \ Archivos de programa'

es que Subcarpetas es la ruta de las subcarpetas. Como una matriz de celdas, por

ejemplo: {'D: \ Archivos de programa \ FileZilla FTP Client \ docs'}

El resultado de leer el nombre del archivo se muestra en la siguiente figura:
Leer nombre de archivo

2. Una breve introducción a algunas funciones

función dir
Ejemplo :
dir ('.'): Lista todas las subcarpetas y archivos en el directorio actual
Leer el nombre de la carpeta actual y los archivos en la carpeta actual
función cellfun
operación objetivo es cellfun matriz de celdas, se puede utilizar para cualquier número de funciones definidas en el
tipo de clase de datos o cálculos de matriz, cellfun Usted puede usar una función personalizada para procesar la matriz de celdas.
El formato de llamada es:
A = cellfun (FUN, C)
ejemplo de cellfun

3. Lea la función de nombre de archivo del formato específico en la carpeta

el código se muestra a continuación:

function [FileNames] = GetFileNames(Path,Format)
fileFolder=fullfile(Path);
dirOutput=dir(fullfile(fileFolder,Format));
FileNames={
    
    dirOutput.name};
end

La función de esta función es obtener todos los nombres de archivo en un formato determinado bajo una ruta determinada
La ruta de entrada de la función es la ruta a obtener.

Ejemplo: El formato de entrada de la función '
D: \ Archivos de programa \ FileZilla FTP Client \ docs'

es el formato de archivo de la ruta que se va a obtener.

Ejemplo:
' .txt', ' .docx', '*. Png'


4. Leer por lotes los nombres de los archivos en la carpeta

Los nombres de archivo creados antes son "1st", "2nd", .... Aquí, cree una matriz de celdas para almacenar los nombres de los archivos leídos y los datos del archivo txt, y almacene los datos diarios leídos en una nueva matriz en forma de columnas, y asígneles el nombre "Q1", "Q2",….

foldernames=GetFolders('D:\9月');
namelist=cell(1,length(foldernames));
for i=1:length(foldernames)
   a=foldernames{
    
    i};
   num=str2num(a(7:end-1));
   namelist{
    
    1,i}=GetFileNames(foldernames{
    
    i},'*.freq');
   P=cell(1,length(namelist{
    
    1,i}));
   for j=1:length(namelist{
    
    1,i})
       filename= namelist{
    
    i}{
    
    j};
       P{
    
    1,j} = importdata([foldernames{
    
    i},'\',filename]);
   end
   eval(['Q',num2str(num),'=[]']);
   for t=1:length(namelist{
    
    1,i})
      eval(['Q',num2str(num),'=[Q',num2str(num),',P{1,t}.data];']);
   end
end
total=[];
for i=1:length(foldernames)
    eval(['total=[total,Q',num2str(i),'];']);
end

Lea los nombres de los 100 archivos txt en el directorio 'D: \ September' que se acaba de crear, y el resultado es el que se muestra en la siguiente figura:

nombre del archivo

Supongo que te gusta

Origin blog.csdn.net/weixin_40653652/article/details/108759707
Recomendado
Clasificación