Julia新手问询:如何批量将自定义函数应用于目录文件数组
把函数应用到Julia数组的每个元素
嘿,作为Julia新手遇到这种问题太正常啦!我来帮你把myFunction应用到allfiles里的每个文件名,顺便给你几种不同的实现方式,挑你觉得顺手的来就行~
方法1:最直观的for循环
这和你之前获取文件列表的思路一致,逐个遍历数组里的文件名并调用函数,非常容易理解,新手调试起来也方便:
for file in allfiles myFunction(file) end
要是你需要在处理过程中加额外操作(比如打印当前处理的文件名),直接在循环里加代码就行。
方法2:函数式风格的foreach(推荐)
如果你的myFunction主要是做生成图表这种「副作用操作」(不需要保存返回值),用foreach会更合适——它专门用来对数组每个元素执行函数,并且会忽略返回值,写法也更简洁:
foreach(myFunction, allfiles)
这行代码和上面的for循环效果完全一样,但更符合Julia的简洁风格。
方法3:用map函数保存结果
如果你需要保存myFunction的返回结果(比如每个文件处理后的统计数据),可以用map,它会把函数应用到每个元素后返回一个新数组:
results = map(myFunction, allfiles)
关于你试过的点语法(广播)
你提到用点语法没成功,理论上如果myFunction是为单个文件名设计的,myFunction.(allfiles)这种广播写法应该能运行。但如果函数内部有不支持广播的操作(比如修改全局变量、调用了不兼容广播的函数),就会报错。如果想让广播生效,得确保函数里的每一步都兼容广播,但对于生成图表这种场景,前面的foreach或for循环其实更稳妥。
顺便优化下你的文件列表获取代码
你之前写的获取txt文件的代码可以简化成一行,更符合Julia的风格:
allfiles = filter(filename -> endswith(filename, ".txt"), readdir(pwd()))
或者如果你愿意用第三方包的话,Glob包能更方便地匹配文件:
# 先安装包(只需要执行一次) using Pkg Pkg.add("Glob") # 然后获取所有txt文件 using Glob allfiles = glob("*.txt", pwd())
内容的提问来源于stack exchange,提问作者Micael Edwards
相关产品推荐
相关产品推荐

