自动化mathematica以从多个文件夹导入文件

时间:2014-09-26 17:58:45

标签: import wolfram-mathematica directory

我有来自示波器的数据,因为我需要进行小的变化,我最终会得到一定数量的文件夹,每个文件夹都包含我需要的两个文件。对所有文件夹进行的分析是相同的,所以此时我必须一遍又一遍地复制粘贴我的整个分析。

我的文件夹的结构是:

C:\Users\................\data\

包含文件夹:

10ms
20ms
.
.
.
100ms

每个文件夹都重复相同的测量,例如文件夹10ms具有:

10ms---> ALL0000 ---> F0000CH1.CSV
                      F0000CH2.CSV

         ALL0001 ---> F0001CH1.CSV
                      F0001CH2.CSV    

         ALL0002 ---> F0002CH1.CSV
                      F0002CH2.CSV
            .
            .

         ALL0004

我想知道是否可以使用mathematica,转到文件夹10ms,选择所有以CH1.CSV结尾的文件和那些CH2.CSV的文件(但要区分它们),一旦完成,就去到文件夹20ms并一直重复到100ms。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

尝试使用FileNames获取当前文件夹中的文件或目录列表。将其输出放在数组中并循环执行。您需要将SetDirectory []添加到该目录,而不是使用简单的导入。 至于文件,您可以使用模式" * CH1.csv"创建要打开的文件名。对于*,您使用循环迭代次数的字符串表达式。唯一的问题是添加前导零。到目前为止,我担心Mathematica中没有内置函数,所以我自己写了。可以与你分享;)

P.S。快速提示。看着你完整的路径,你将数据放在C:\ Users \ etc中。尝试使用SetDirectory [NotebookDirectory []]。这会将当前路径设置为放置.nb文件的路径。您还可以使用FileNameJoin(跨平台的)或NotebookDirectory<>" \子目录"添加子目录。如果你是Windows用户。使用ParentDirectory []也可以在路径中获得一个级别。

答案 1 :(得分:0)

用于结果的方法如下:

SetDirectory["C:\\ ....................\\ path to where the folders are found]

如问题中所述,我们有10个文件夹(10ms,20ms,30ms,... 100ms),每个文件夹都有多次重复测量(ALL0001,ALL0002,.....)。每个文件夹都有2个文件,每个文件对应两个使用的信道。

我们从For循环开始,它将负责分析将在哪个父文件夹上进行: 所以步骤从10ms到20ms再到30ms等等。然后,内部循环将负责 导入所需文件并执行分析。

For[ i=1, i<11, i++

SetDirectory[ToString[i*10]<>"ms"];

FileNamesch1 = FileNames["*CH1.CSV", {"*"}, Infinity];
FileNamesch2 = FileNames["*CH2.CSV", {"*"}, Infinity];

RawData={};

  For[ k=1, k<Length[FileNamesch1]+1, k++

      CH1 = Import[FindFile[ToString[FileNamesch1[[k]]]]];
      CH2 = Import[FindFile[ToString[FileNamesch2[[k]]]]];

      AppendTo[DataRaw,{CH1,CH2}]

     ANALYSIS is performed on the files

      ] (* end of analysis loop *)

SetDirectory[ParentDirectory[]];


 ] (* End of Directory Loop *)

这样,外部循环就可以进入下一个20ms的文件夹并重复到100ms。