# Feature request: How about pattern matching of \`Base.Filesystem.readdir\`?

**URL:** https://discourse.julialang.org/t/feature-request-how-about-pattern-matching-of-base-filesystem-readdir/91887
**Category:** Internals & Design
**Tags:** regex, pattern-matching
**Created:** [December 20, 2022, 4:52am UTC](https://discourse.julialang.org/t/feature-request-how-about-pattern-matching-of-base-filesystem-readdir/91887 "2022-12-20T04:52:38Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![rmsmsgood](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rmsmsgood/32/20544_2.png) [@rmsmsgood](https://discourse.julialang.org/u/rmsmsgood)
#### Post date: [December 20, 2022, 4:52am UTC](https://discourse.julialang.org/t/feature-request-how-about-pattern-matching-of-base-filesystem-readdir/91887/1 "2022-12-20T04:52:38Z")

</div>

It’s `Base.Filesystem.readdir` in julia:  
[https://docs.julialang.org/en/v1/base/file/#Base.Filesystem.readdir](https://docs.julialang.org/en/v1/base/file/#Base.Filesystem.readdir)

It’s `readdir` in R, it has `exclude` argument as regular expression:

> **[readdir function - RDocumentation](https://www.rdocumentation.org/packages/taRifx/versions/1.0.6.2/topics/readdir)**
>
> \<p\>Loads all readable files in a directory into a list, with
> names according to the filenames\</p\>

```julia
readdir(dir::AbstractString=pwd();
    join::Bool = false,
    sort::Bool = true,
) -> Vector{String}

```

Present `readdir` has two arguments, how about pattern matching feature?

For example:

```julia
julia> readdir()
4-element Vector{String}:
 "Australia-1950.xlsx"
 "Australia-1955.csv"
 "Australia-1960.csv"
 "example.jl"

julia> readdir(pattern = "*.csv") # Common sense
2-element Vector{String}:
 "Australia-1955.csv"
 "Australia-1960.csv"

julia> readdir(pattern = Not("*.csv")) # What a native julia
2-element Vector{String}:
 "Australia-1950.xlsx"
 "example.jl"

julia> readdir(pattern = Not(["*.csv", "*.jl"])) # What a native julia 2
1-element Vector{String}:
 "Australia-1950.xlsx"

julia> readdir(pattern = "Australia*") # Regular expression. It could be tricky or just use RE.
3-element Vector{String}:
 "Australia-1950.xlsx"
 "Australia-1955.csv"
 "Australia-1960.csv"

```

Of course I can do all above examples using regular expression, not that hard, but I guess it’s gonna fantastic if the feature become native. And I think regular expression is too much to use somtimes  
in these function, so it’ll be pleasure if “\*.csv” thing is implemented although whole regular expression are not supported. Alternatively, `extension = "csv"` will be also great.

---

<div class="post-metadata">

### Author: ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)
#### Post date: [December 20, 2022, 5:16am UTC](https://discourse.julialang.org/t/feature-request-how-about-pattern-matching-of-base-filesystem-readdir/91887/2 "2022-12-20T05:16:47Z")

</div>

you’re just looking for

```julia
filter(!contains(r"*\.csv"), readdir())

```

---

<div class="post-metadata">

### Author: ![rmsmsgood](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rmsmsgood/32/20544_2.png) [@rmsmsgood](https://discourse.julialang.org/u/rmsmsgood)
#### Post date: [December 20, 2022, 5:56am UTC](https://discourse.julialang.org/t/feature-request-how-about-pattern-matching-of-base-filesystem-readdir/91887/3 "2022-12-20T05:56:09Z")

</div>

No, as I mentioned, it could be implemented easily like that. Even regular expression is not nesessary. Below is not perfect, but almost works:

```julia
readdir()[contains.(readdir(), ".csv")]

```

My point is, an argument like `pattern` or `extension` would be a good feature of `readdir`. Especially newbies to julia , I think.

---

<div class="post-metadata">

### Author: ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)
#### Post date: [December 20, 2022, 6:17am UTC](https://discourse.julialang.org/t/feature-request-how-about-pattern-matching-of-base-filesystem-readdir/91887/4 "2022-12-20T06:17:36Z")

</div>

> [@rmsmsgood](#):
>
> an argument like `pattern` or `extension` would be a good feature of `readdir`. Especially newbies to julia

I think many would disagree. Composability \> bloated option repetition in each function.

---

<div class="post-metadata">

### Author: ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)
#### Post date: [December 20, 2022, 6:19am UTC](https://discourse.julialang.org/t/feature-request-how-about-pattern-matching-of-base-filesystem-readdir/91887/5 "2022-12-20T06:19:48Z")

</div>

This post was temporarily hidden by the community for possibly being off-topic, unfocused, inappropriate, or spammy.

---

<div class="post-metadata">

### Author: ![laborg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/laborg/32/5474_2.png) [@laborg](https://discourse.julialang.org/u/laborg)
#### Post date: [December 20, 2022, 9:09am UTC](https://discourse.julialang.org/t/feature-request-how-about-pattern-matching-of-base-filesystem-readdir/91887/6 "2022-12-20T09:09:29Z")

</div>

This might also be of relevance: [GitHub - vtjnash/Glob.jl: Posix-compliant file name pattern matching](https://github.com/vtjnash/Glob.jl)

---

<div class="post-metadata">

### Author: ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)
#### Post date: [December 20, 2022, 12:09pm UTC](https://discourse.julialang.org/t/feature-request-how-about-pattern-matching-of-base-filesystem-readdir/91887/7 "2022-12-20T12:09:20Z")

</div>

> [@jling](#):
>
> `r"*.csv"`

Sorry to nitpick, but you probably meant:  
`r".*\.csv"`

---

<div class="post-metadata">

### Author: ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)
#### Post date: [December 20, 2022, 2:55pm UTC](https://discourse.julialang.org/t/feature-request-how-about-pattern-matching-of-base-filesystem-readdir/91887/8 "2022-12-20T14:55:44Z")

</div>

yes thanks for the correction, or

```julia
endswith(".csv")
contains(".csv")

```

if one doesn’t want the `\.` escaping in regex
