Changelog History
Page 1
-
v1.0.7 Changes
March 06, 2022- 🛠 fix: :doc:
/scripts/csvcutextracts the correct columns when :code:--line-numbersis set. - 🛠 fix: Restore Python 2.7 support in edge cases.
- 🐎 feat: Use 1024 byte sniff-limit by default across csvkit. Improve csvstat performance up to 10x.
- 👍 feat: Add support for
.xz(LZMA) compressed input files. - ➕ Add Python 3.10 support.
- ⬇️ Drop Python 3.5 support (end-of-life was September 30, 2020).
- 🛠 fix: :doc:
-
v1.0.6 Changes
July 13, 2021🔄 Changes:
- 🖨 :doc:
/scripts/csvstatno longer prints "Row count: " when :code:--countis set. - :doc:
/scripts/csvclean, :doc:/scripts/csvcut, :doc:/scripts/csvgrepno longer error if standard input is null.
🛠 Fixes:
- 0️⃣ :doc:
/scripts/csvformatcreates default headers when :code:--no-header-rowis set, as documented. - :doc:
/scripts/csvstackno longer errors when :code:--no-header-rowis combined with :code:--groupsor :code:--filenames.
- 🖨 :doc:
-
v1.0.5 Changes
March 02, 2020🔄 Changes:
- ⬇️ Dropped Python 3.4 support (end-of-life was March 18, 2019).
👌 Improvements:
- Output error message for memory error even if not :code:
--verbose.
🛠 Fixes:
- 🛠 Fix regression in 1.0.4, which caused numbers like
4.5to be parsed as dates. - :doc:
/scripts/in2csvFix error reporting if :code:--namesused with non-Excel file.
-
v1.0.4 Changes
March 16, 2019🔄 Changes:
- ⬇️ Dropped Python 3.3 support (end-of-life was September 29, 2017).
👌 Improvements:
- :doc:
/scripts/csvsqladds a :code:--chunk-sizeoption to set the chunk size when batch inserting into a table. - ✅ csvkit is now tested against Python 3.7.
🛠 Fixes:
- :code:
--namesworks with :code:--skip-lines. - 📜 Dates and datetimes without punctuation can be parsed with :code:
--date-formatand :code:datetime-format. - Error messages about column indices use 1-based numbering unless :code:
--zerois set. - :doc:
/scripts/csvcutno longer errors on :code:--delete-empty-rowswith short rows. - :doc:
/scripts/csvjoinno longer errors if given a single file. - ⚡️ :doc:
/scripts/csvsqlsupports UPDATE commands. - :doc:
/scripts/csvstatno longer errors on non-finite numbers. - :doc:
/scripts/csvstatrespects all command-line arguments when :code:--countis set. - :doc:
/scripts/in2csvCSV-to-CSV conversion respects :code:--linenumberswhen buffering. - :doc:
/scripts/in2csvwrites XLS sheets without encoding errors in Python 2.
-
v1.0.3 Changes
March 11, 2018👌 Improvements:
- :doc:
/scripts/csvgrepadds a :code:--any-match(:code:-a) flag to select rows where any column matches instead of all columns. - :doc:
/scripts/csvjsonno longer emits a property if its value is null. - :doc:
/scripts/csvjsonadds :code:--typeand :code:--geometryoptions to emit non-Point GeoJSON features. - :doc:
/scripts/csvjsonadds a :code:--no-bboxoption to disable the calculation of a bounding box. - 👍 :doc:
/scripts/csvjsonsupports :code:--streamfor newline-delimited GeoJSON. - :doc:
/scripts/csvsqladds a :code:--unique-constraintoption to list names of columns to include in a UNIQUE constraint. - :doc:
/scripts/csvsqladds :code:--before-insertand :code:--after-insertoptions to run commands before and after the INSERT command. - :doc:
/scripts/csvpyreports an error message if input is provided via STDIN. - :doc:
/scripts/in2csvadds a :code:--encoding-xlsoption to specify the encoding of the input XLS file. - 👍 :doc:
/scripts/in2csvsupports :code:--no-header-rowon XLS and XLSX files. - ⚠ Suppress agate warning about column names not specified when using :code:
--no-header-row. - Prompt the user if additional input is expected (i.e. if no input file or piped data is provided).
- ✅ Update to
agate-excel 0.2.2 <http://agate-excel.readthedocs.io/en/latest/#changelog>,agate-sql 0.5.3 <http://agate-sql.readthedocs.io/en/latest/#changelog>.
🛠 Fixes:
- :doc:
/scripts/csvgrepaccepts utf-8 arguments to the :code:--matchand :code:--regexoptions in Python 2. - :doc:
/scripts/csvjsonstreams input and output only if :code:--snifflimitis :code:0. - :doc:
/scripts/csvsqlsets a DECIMAL's precision and scale and a VARCHAR's length to avoid dialect-specific errors. - :doc:
/scripts/csvstackno longer opens all files at once. - :doc:
/scripts/in2csvrespects :code:--no-header-rowwhen :code:--no-inferenceis set. - :doc:
/scripts/in2csvCSV-to-CSV conversion streams input and output only if :code:--snifflimitis :code:0. - 👍 :doc:
/scripts/in2csvsupports GeoJSON files with:geometryset tonull, missing Pointcoordinates, altitude coordinate values.
✅ csvkit is no longer tested on PyPy.
- :doc:
-
v1.0.2 Changes
April 28, 2017👌 Improvements:
- ➕ Add a :code:
--versionflag. - ➕ Add a :code:
--skip-linesoption to skip initial lines (e.g. comments, copyright notices, empty rows). - ➕ Add a :code:
--localeoption to set the locale of any formatted numbers. - ➕ Add a :code:
--date-formatoption to set a strptime date format string. - ➕ Add a :code:
--datetime-formatoption to set a strptime datetime format string. - 👉 Make :code:
--blanksa common argument across all tools. - :code:
-Iis the short option for :code:--no-inference. - 👍 :doc:
/scripts/csvclean, :doc:/scripts/csvformat, :doc:/scripts/csvjson, :doc:/scripts/csvpysupport :code:--no-header-row. - :doc:
/scripts/csvcleanis faster and no longer requires exponential time in the worst case. - 👍 :doc:
/scripts/csvformatsupports :code:--linenumbersand--zero(no-op). - 👍 :doc:
/scripts/csvjoinsupports :code:--snifflimitand :code:--no-inference. - 👍 :doc:
/scripts/csvpysupports :code:--linenumbers(no-op) and :code:--zero(no-op). - :doc:
/scripts/csvsqladds a :code:--prefixoption to add expressions like OR IGNORE or OR REPLACE following the INSERT keyword. - :doc:
/scripts/csvsqladds a :code:--overwriteflag to drop any existing table with the same name before creating. - :doc:
/scripts/csvsqlaccepts a file name for the :code:--queryoption. - 👍 :doc:
/scripts/csvsqlsupports :code:--linenumbers(no-op). - :doc:
/scripts/csvsqladds a :code:--create-if-not-existsflag to not abort if the table already exists. - :doc:
/scripts/csvstatadds a :code:--freq-countoption to set the maximum number of frequent values to display. - 👍 :doc:
/scripts/csvstatsupports :code:--linenumbers(no-op). - 🖨 :doc:
/scripts/in2csvadds a :code:--namesflag to print Excel sheet names. - :doc:
/scripts/in2csvadds a :code:--write-sheetsoption to write the named Excel sheets to files. - :doc:
/scripts/sql2csvadds an :code:--encodingoption to specify the encoding of the input query file.
🛠 Fixes:
- :doc:
/scripts/csvgrepno longer ignores common arguments if :code:--linenumbersis set. - 👍 :doc:
/scripts/csvjsonsupports Decimal. - 👍 :doc:
/scripts/csvpyagain supports IPython. - ⏪ :doc:
/scripts/csvsqlrestores support for :code:--no-constraintsand :code:--db-schema. - :doc:
/scripts/csvstatwill no longer crash when :code:--freqis set. - ⏪ :doc:
/scripts/in2csvrestores support for :code:--no-inferencefor Excel files. - ⏪ :doc:
/scripts/in2csvrestores support for converting Excel files from standard input. - :doc:
/scripts/in2csvaccepts utf-8 arguments to the :code:--sheetoption in Python 2.
- ➕ Add a :code:
-
v1.0.1 Changes
December 29, 2016🚀 This is a minor release which fixes several bugs reported in the :code:
1.0.0release earlier this week. It also significantly improves the output of :doc:/scripts/csvstatand adds a :code:--csvoutput option to that command.- :doc:
/scripts/csvstatwill no longer crash when a :code:Numbercolumn has :code:Noneas a frequent value. (#738) - 📄 :doc:
/scripts/csvlookdocs now note that output tables are Markdown-compatible. (#734) - 👍 :doc:
/scripts/csvstatnow supports a :code:--csvflag for tabular output. (#584) - :doc:
/scripts/csvstatoutput is now easier to read. (#714) - 👍 :doc:
/scripts/csvpynow has a better description when using the :code:--agateflag. (#729) - 🛠 Fix a Python 2.6 bug preventing :doc:
/scripts/csvjsonfrom parsing utf-8 files. (#732) - ⚡️ Update required version of unittest to latest. (#727)
- :doc:
-
v1.0.0 Changes
December 27, 2016🚀 This is the first major release of csvkit in a very long time. The entire backend has been rewritten to leverage the
agate <http://agate.rtfd.io>_ data analysis library, which was itself inspired by csvkit. The new backend provides better type detection accuracy, as well as some new features.🚀 Because of the long and complex cycle behind this release, the list of changes should not be considered exhaustive. In particular, the output format of some tools may have changed in small ways. Any existing data pipelines using csvkit should be tested as part of the upgrade.
🚀 Much of the credit for this release goes to
James McKinney <https://github.com/jpmckinney>_, who has almost single-handedly kept the csvkit fire burning for a year. Thanks, James!Backwards-incompatible changes:
- 🛠 :doc:
/scripts/csvjoinnow renames duplicate columns with integer suffixes to prevent collisions in output. - :doc:
/scripts/csvsqlnow generatesDateTimecolumns instead ofTimecolumns. - :doc:
/scripts/csvsqlnow generatesDecimalcolumns instead ofInteger,BigInteger, andFloatcolumns. - :doc:
/scripts/csvsqlno longer generates max-length constraints for text columns. - The
--doublequotelong flag is gone, and the-bshort flag is now an alias for--no-doublequote. - When using the
--columnsor--not-columnsoptions, you must not have spaces around the comma-separated values, unless the column names contain spaces. - When sorting, null values are now greater than other values instead of less than.
- 🚚
CSVKitReader,CSVKitWriter,CSVKitDictReader, andCSVKitDictWriterhave been removed. Useagate.csv.reader,agate.csv.writer,agate.csv.DictReaderandagate.csv.DictWriter. - ⬇️ Drop Python 2.6 support (end-of-life was October 29, 2013).
- ⬇️ Drop support for older versions of PyPy.
- If
--no-header-rowis set, the output will have column namesa,b,c, etc. instead ofcolumn1,column2,column3, etc. - csvlook renders a simpler, markdown-compatible table.
👌 Improvements:
- ✅ csvkit is now tested against Python 3.6. (#702)
import csvkit as csvwill now defer to agate readers/writers.- 👍 :doc:
/scripts/csvgrepsupports--no-header-row. - 👍 :doc:
/scripts/csvjoinsupports--no-header-row. - :doc:
/scripts/csvjsonstreams input and output if the--streamand--no-inferenceflags are set. - 👍 :doc:
/scripts/csvjsonsupports--snifflimitand--no-inference. - :doc:
/scripts/csvlookadds--max-rows,--max-columnsand--max-column-widthoptions. - 👍 :doc:
/scripts/csvlooksupports--snifflimitand--no-inference. - 👍 :doc:
/scripts/csvpysupports--agateto read a CSV file into an agate table. - ✅
csvsqlsupports customSQLAlchemy dialects <http://docs.sqlalchemy.org/en/latest/dialects/>_. - 👍 :doc:
/scripts/csvstatsupports--names. - :doc:
/scripts/in2csvCSV-to-CSV conversion streams input and output if the--no-inferenceflag is set. - :doc:
/scripts/in2csvCSV-to-CSV conversion usesagate.Table. - :doc:
/scripts/in2csvGeoJSON conversion adds columns for geometry type, longitude and latitude. - 📚 Documentation: Update tool usage, remove shell prompts, document connection string, correct typos.
🛠 Fixes:
- 🛠 Fixed numerous instances of open files not being closed before utilities exit.
- 🔄 Change
-b,--doublequoteto--no-doublequote, as doublequote is True by default. - :doc:
/scripts/in2csvDBF conversion works with Python 3. - :doc:
/scripts/in2csvcorrectly guesses format when file has an uppercase extension. - :doc:
/scripts/in2csvcorrectly interprets--no-inference. - 🛠 :doc:
/scripts/in2csvagain supports nested JSON objects (fixes regression). - 🖨 :doc:
/scripts/in2csvwith--format geojsonwill print a JSON object instead ofOrderedDict([(...)]). - 🏁 :doc:
/scripts/csvcleanwith standard input works on Windows. - :doc:
/scripts/csvgrepreturns the input file's line numbers if the--linenumbersflag is set. - :doc:
/scripts/csvgrepcan match multiline values. - :doc:
/scripts/csvgrepcorrectly operates on ragged rows. - :doc:
/scripts/csvsqlcorrectly escapes%` characters in SQL queries. - :doc:
/scripts/csvsqladds standard input only if explicitly requested. - 👍 :doc:
/scripts/csvstacksupports stacking a single file. - :doc:
/scripts/csvstatalways reports frequencies. - The
any_matchargument ofFilteringCSVReadernow works correctly. - All tools handle empty files without error.
- 🛠 :doc:
-
v0.9.2
September 04, 2018 -
v0.9.1 Changes
March 31, 2015- ➕ Add Antonio Lima to AUTHORS.
- ➕ Add support for ndjson. (#329)
- ➕ Add missing docs for csvcut -C. (#227)
- 📄 Reorganize docs so TOC works better. (#339)
- 📄 Render docs locally with RTD theme.
- 🛠 Fix header in "tricks" docs.
- ➕ Add install instructions to tutorial. (#331)
- ➕ Add killer examples to doc index. (#328)
- Reorganize doc index
- 🛠 Fix broken csvkit module documentation. (#327)
- 🛠 Fix version of openpyxl to work around encoding issue. (#391, #288)