Setting
我需要遍历100个.txt文件的目录,打开每个文件并对每个文件执行一些功能,然后合并结果 . 这些文件很大,大约10GB . 伪造的代码中的一些常见操作可能是:
foldr concatFile mempty $ openFile <$> [filePath1, ..., filePathn]
foldr countStuff 0 $ openFile <$> [filePath1, ..., filePathn]
诀窍是确保所有文件同时存在于内存中,我以前的天真解决方案在我的mac上创建了各种交换文件 . 另外,如果其中一个filePath无效,我想跳过它继续该程序 .
My Solution
目前我正在使用管道,并希望尽可能找到使用管道的解决方案 . 但如果它不是正确的工具我可以使用别的东西 .
1 回答
您可以像这样嵌套管道执行:
将
processFile
替换为您想要做的任何事情 - 包括忽略该文件 . 我的理解是sourceFile
Producer将有效地分块文件的内容 .并且,根据this Yesod article,
sourceDirectoryDeep
应该有效地遍历目录结构 .你显然不能用
sourceDirectoryDeep
做的事是修剪目录 .