我有来自示波器的数据,因为我需要进行小的变化,我最终会得到一定数量的文件夹,每个文件夹都包含我需要的两个文件。对所有文件夹进行的分析是相同的,所以此时我必须一遍又一遍地复制粘贴我的整个分析。
我的文件夹的结构是:
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。
有什么想法吗?
答案 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。