在文件夹中搜索文件

33

我正在尝试使用Julia解析大量文本文件,希望能够循环遍历文件名数组,而不是逐个键入读取每个文件的函数调用。到目前为止,我无法找到一种方法来搜索与模式匹配的文件夹中的文件。

是否有一个基础库Julia函数,可以返回给定文件夹中匹配给定字符串模式的所有文件名?

R中的等效函数是list.files(),如果这有助于传达我的意思。


MDe,您可能需要更新您的回答。@Trock的答案中的Glob.jl包比单行代码更直接和易读。 - Kenn Sebesta
2个回答

52
在Julia中,等价于list.files()的函数是readdir([path])
我不知道是否有内置的目录搜索功能,但这只需要一行代码: searchdir(path, key) = filter(x -> contains(x, key), readdir(path)) 更新:自Julia v0.7以来,contains()已被弃用,应该使用occursin(substring, string)。因此上面的筛选器现在应该是:
searchdir(path,key) = filter(x->occursin(key,x), readdir(path))

2
作为补充:类似于 contains,以下函数可能会有用:isfileisdirstartswithendswith - carstenbauer
1
你也可以使用readdir(expanduser(path))~转换为主目录(在Linux下)。 此外,还可以使用正则表达式:searchdir(“〜/ Package / MyPackage / src /”,r“.jl $”) - Picaud Vincent
在 Julia 1.5 之后,contains 又可用了。 - Daniel Pinyol

22

另一种解决方案是使用Glob.jl包。例如,如果您的目录中有以下文件列表:

foo1.txt
foo2.txt
foo3.txt
bar1.txt
foo.jl

如果你想找到所有以“foo”开头的文本文件,你可以写成:

and you want to find all text files starting with "foo" you would write

using Glob
glob("foo*.txt") #if searching the working directory
#output:
#"foo1.txt"
#"foo2.txt"
#"foo3.txt"
glob("foo*.txt","path/to/dir") #for specifying a different directory
#output:
#"path/to/dir/foo1.txt"
#"path/to/dir/foo2.txt"
#"path/to/dir/foo3.txt"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接