From 4f435735dccc9d0cf1581a33b0d7315846293c2c Mon Sep 17 00:00:00 2001 From: Pearl Li Date: Fri, 27 Sep 2019 16:43:54 -0700 Subject: [PATCH 1/2] Add append kwarg --- src/csv_writer.jl | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/src/csv_writer.jl b/src/csv_writer.jl index 0d2a2b3..e836458 100644 --- a/src/csv_writer.jl +++ b/src/csv_writer.jl @@ -45,7 +45,7 @@ end end end -function _save(io, data; delim=',', quotechar='"', escapechar='"', nastring="NA", header=true) +function _save(io, data; delim=',', quotechar='"', escapechar='"', nastring="NA", header=true, append=false) isiterabletable(data) || error("Can't write this data to a CSV file.") it = getiterator(data) @@ -62,17 +62,19 @@ function _save(io, data; delim=',', quotechar='"', escapechar='"', nastring="NA" _writecsv(io, it, eltype(it), delim, quotechar, escapechar, nastring) end -function _save(filename::AbstractString, data; delim=',', quotechar='"', escapechar='"', nastring="NA", header=true) +function _save(filename::AbstractString, data; delim=',', quotechar='"', escapechar='"', nastring="NA", header=true, append=false) isiterabletable(data) || error("Can't write this data to a CSV file.") ext = last(split(filename, '.')) if ext == "gz" # Gzipped + append && error("Appending to gzipped CSV file not supported.") open(GzipCompressorStream, filename, "w") do io _save(io, data, delim=delim, quotechar=quotechar, escapechar=escapechar, nastring=nastring, header=header) end else - open(filename, "w") do io + mode = append ? "a" : "w" + open(filename, mode) do io _save(io, data, delim=delim, quotechar=quotechar, escapechar=escapechar, nastring=nastring, header=header) end end @@ -80,20 +82,20 @@ end -function fileio_save(f::FileIO.File{FileIO.format"CSV"}, data; delim=',', quotechar='"', escapechar='"', nastring="NA", header=true) - return _save(f.filename, data, delim=delim, quotechar=quotechar, escapechar=escapechar, nastring=nastring, header=header) +function fileio_save(f::FileIO.File{FileIO.format"CSV"}, data; delim=',', quotechar='"', escapechar='"', nastring="NA", header=true, append=false) + return _save(f.filename, data, delim=delim, quotechar=quotechar, escapechar=escapechar, nastring=nastring, header=header, append=append) end -function fileio_save(f::FileIO.File{FileIO.format"TSV"}, data; delim='\t', quotechar='"', escapechar='"', nastring="NA", header=true) - return _save(f.filename, data, delim=delim, quotechar=quotechar, escapechar=escapechar, nastring=nastring, header=header) +function fileio_save(f::FileIO.File{FileIO.format"TSV"}, data; delim='\t', quotechar='"', escapechar='"', nastring="NA", header=true, append=false) + return _save(f.filename, data, delim=delim, quotechar=quotechar, escapechar=escapechar, nastring=nastring, header=header, append=append) end -function fileio_save(s::FileIO.Stream{FileIO.format"CSV"}, data; delim=',', quotechar='"', escapechar='"', nastring="NA", header=true) - return _save(s.io, data, delim=delim, quotechar=quotechar, escapechar=escapechar, nastring=nastring, header=header) +function fileio_save(s::FileIO.Stream{FileIO.format"CSV"}, data; delim=',', quotechar='"', escapechar='"', nastring="NA", header=true, append=false) + return _save(s.io, data, delim=delim, quotechar=quotechar, escapechar=escapechar, nastring=nastring, header=header, append=append) end -function fileio_save(s::FileIO.Stream{FileIO.format"TSV"}, data; delim='\t', quotechar='"', escapechar='"', nastring="NA", header=true) - return _save(s.io, data, delim=delim, quotechar=quotechar, escapechar=escapechar, nastring=nastring, header=header) +function fileio_save(s::FileIO.Stream{FileIO.format"TSV"}, data; delim='\t', quotechar='"', escapechar='"', nastring="NA", header=true, append=false) + return _save(s.io, data, delim=delim, quotechar=quotechar, escapechar=escapechar, nastring=nastring, header=header, append=append) end # @@ -112,25 +114,26 @@ mutable struct CSVFileSaveStream{T} nastring::AbstractString header::Bool end - -function fileio_savestreaming(f::FileIO.File{T}, data=nothing; delim=_delim(T), quotechar='"', escapechar='"', nastring="NA", - header=true) where T <: CSV_or_TSV - io = open(f.filename, "w") + +function fileio_savestreaming(f::FileIO.File{T}, data=nothing; delim=_delim(T), quotechar='"', escapechar='"', nastring="NA", + header=true, append=false) where T <: CSV_or_TSV + mode = append = "a" : "w" + io = open(f.filename, mode) if data!==nothing - _save(io, data; delim=delim, quotechar=quotechar, escapechar=escapechar, nastring=nastring, header=header) + _save(io, data; delim=delim, quotechar=quotechar, escapechar=escapechar, nastring=nastring, header=header, append=append) end return CSVFileSaveStream(io, data!==nothing, delim, quotechar, escapechar, nastring, header) end -function fileio_savestreaming(s::FileIO.Stream{T}, data=nothing; delim=_delim(T), quotechar='"', escapechar='"', nastring="NA", - header=false) where T <: CSV_or_TSV +function fileio_savestreaming(s::FileIO.Stream{T}, data=nothing; delim=_delim(T), quotechar='"', escapechar='"', nastring="NA", + header=false, append=false) where T <: CSV_or_TSV if data!==nothing - _save(s.io, data; delim=delim, quotechar=quotechar, escapechar=escapechar, nastring=nastring, header=header) + _save(s.io, data; delim=delim, quotechar=quotechar, escapechar=escapechar, nastring=nastring, header=header, append=append) end - + return CSVFileSaveStream(s.io, data!==nothing, delim, quotechar, escapechar, nastring, header) end From ee2a3d775922dc5ad957d4a2e0f7ddc6aa75f1e6 Mon Sep 17 00:00:00 2001 From: Pearl Li Date: Sun, 29 Sep 2019 12:29:13 -0700 Subject: [PATCH 2/2] Fix ternary operator bug --- src/csv_writer.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/csv_writer.jl b/src/csv_writer.jl index e836458..0f119a3 100644 --- a/src/csv_writer.jl +++ b/src/csv_writer.jl @@ -117,7 +117,7 @@ end function fileio_savestreaming(f::FileIO.File{T}, data=nothing; delim=_delim(T), quotechar='"', escapechar='"', nastring="NA", header=true, append=false) where T <: CSV_or_TSV - mode = append = "a" : "w" + mode = append ? "a" : "w" io = open(f.filename, mode) if data!==nothing