# What's the difference between CSV.jl and CSVFiles.jl?

**URL:** <https://discourse.julialang.org/t/whats-the-difference-between-csv-jl-and-csvfiles-jl/17950>\
**Category:** New to Julia\
**Created:** [November 24, 2018, 7:51pm UTC](https://discourse.julialang.org/t/whats-the-difference-between-csv-jl-and-csvfiles-jl/17950 "2018-11-24T19:51:46Z")\
**Posts on this page:** 1\
**Showing post:** 5

<div class="post-metadata">

**Author:** ![quinnj](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/quinnj/32/11_2.png) [@quinnj](https://discourse.julialang.org/u/quinnj)\
**Post date:** [November 30, 2018, 6:19am UTC](https://discourse.julialang.org/t/whats-the-difference-between-csv-jl-and-csvfiles-jl/17950/5 "2018-11-30T06:19:24Z")

</div>

I put together a quick comparison of supported features between CSVFiles.jl & CSV.jl:

| | CSV.jl | CSVFiles.jl |
| --- | --- | --- |
| `Char` delimiters | ✅ | ✅ |
| `String` delimiters | ✅ | |
| Space delimiter | ✅ | ✅ |
| Ignoring any repeated delimiter (fix-width files) | ✅ | |
| `Char` quote characters | ✅ | ✅ |
| Separate open/close quote characters | ✅ | |
| escape characters | ✅ | ✅ |
| skip rows to parse | ✅ | ✅ |
| limit rows to parse | ✅ | |
| handle files without header row | ✅ | ✅ |
| manually provide column names | ✅ | ✅ |
| specify arbitrary row or range of rows for column headers | ✅ | |
| specify # of rows to use for type inference | | ✅ |
| automatically sample entire file for type inference | ✅ | |
| manually specify column types by index or name | ✅ | ✅ |
| parse all columns of one type as another | ✅ | |
| specify arbitrary missing value strings | ✅ | ✅ |
| transform column names into valid julia identifiers | ✅ | |
| specify arbitrary row where “data” begins | ✅ | |
| skip parsing # of rows at end of file | ✅ | |
| specify comment character/string to ignore commented rows | ✅ | |
| read a file transposed (rows as columns, columns as rows) | ✅ | |
| support alternative decimal separator characters (`3.14` vs. `3,14`) | ✅ | |
| specify arbitrary values to parse as `true` or `false` `Bool` values | ✅ | |
| auto detect and parse columns as `CategoricalArray` | ✅ | |
| option to ignore invalid values (replaced with `missing`) | ✅ | |
| ability to selectively parse specific columns | ✅ | |
| ability to apply arbitrary scalar transform functions while parsing | ✅ | |

CSV.jl has been around for a long time now (started May 2015) vs. CSVFiles.jl (June 2017), and developed a ton of requested features. Please chime in if there’s anything missing!

---

_[View the full topic](https://discourse.julialang.org/t/whats-the-difference-between-csv-jl-and-csvfiles-jl/17950)._
