Skip to main content

A Python package for handling messy CSV files

Project description


Github Actions Build Status PyPI version Documentation Status Downloads Binder

CleverCSV provides a drop-in replacement for the Python csv package with improved dialect detection for messy CSV files. It also provides a handy command line tool that can standardize a messy file or generate Python code to import it.

Useful links:


Contents: Quick Start | Introduction | Installation | Usage | Python Library | Command-Line Tool | Version Control Integration | Contributing | Notes


Quick Start

Click here to go to the introduction with more details about CleverCSV. If you're in a hurry, below is a quick overview of how to get started with the CleverCSV Python package and the command line interface.

For the Python package:

# Import the package
>>> import clevercsv

# Load the file as a list of rows
# This uses the imdb.csv file in the examples directory
>>> rows = clevercsv.read_table('./imdb.csv')

# Load the file as a Pandas Dataframe
# Note that df = pd.read_csv('./imdb.csv') would fail here
>>> df = clevercsv.read_dataframe('./imdb.csv')

# Use CleverCSV as drop-in replacement for the Python CSV module
# This follows the Sniffer example: https://docs.python.org/3/library/csv.html#csv.Sniffer
# Note that csv.Sniffer would fail here
>>> with open('./imdb.csv', newline='') as csvfile:
...     dialect = clevercsv.Sniffer().sniff(csvfile.read())
...     csvfile.seek(0)
...     reader = clevercsv.reader(csvfile, dialect)
...     rows = list(reader)

And for the command line interface:

# Install the full version of CleverCSV (this includes the command line interface)
$ pip install clevercsv[full]

# Detect the dialect
$ clevercsv detect ./imdb.csv
Detected: SimpleDialect(',', '', '\\')

# Generate code to import the file
$ clevercsv code ./imdb.csv

import clevercsv

with open("./imdb.csv", "r", newline="", encoding="utf-8") as fp:
    reader = clevercsv.reader(fp, delimiter=",", quotechar="", escapechar="\\")
    rows = list(reader)

# Explore the CSV file as a Pandas dataframe
$ clevercsv explore -p imdb.csv
Dropping you into an interactive shell.
CleverCSV has loaded the data into the variable: df
>>> df

Introduction

  • CSV files are awesome! They are lightweight, easy to share, human-readable, version-controllable, and supported by many systems and tools!
  • CSV files are terrible! They can have many different formats, multiple tables, headers or no headers, escape characters, and there's no support for recording metadata!

CleverCSV is a Python package that aims to solve some of the pain points of CSV files, while maintaining many of the good things. The package automatically detects (with high accuracy) the format (dialect) of CSV files, thus making it easier to simply point to a CSV file and load it, without the need for human inspection. In the future, we hope to solve some of the other issues of CSV files too.

CleverCSV is based on science. We investigated thousands of real-world CSV files to find a robust way to automatically detect the dialect of a file. This may seem like an easy problem, but to a computer a CSV file is simply a long string, and every dialect will give you some table. In CleverCSV we use a technique based on the patterns of row lengths of the parsed file and the data type of the resulting cells. With our method we achieve 97% accuracy for dialect detection, with a 21% improvement on non-standard (messy) CSV files compared to the Python standard library.

We think this kind of work can be very valuable for working data scientists and programmers and we hope that you find CleverCSV useful (if there's a problem, please open an issue!) Since the academic world counts citations, please cite CleverCSV if you use the package. Here's a BibTeX entry you can use:

@article{van2019wrangling,
        title = {Wrangling Messy {CSV} Files by Detecting Row and Type Patterns},
        author = {{van den Burg}, G. J. J. and Naz{\'a}bal, A. and Sutton, C.},
        journal = {Data Mining and Knowledge Discovery},
        year = {2019},
        volume = {33},
        number = {6},
        pages = {1799--1820},
        issn = {1573-756X},
        doi = {10.1007/s10618-019-00646-y},
}

And of course, if you like the package please spread the word! You can do this by Tweeting about it (#CleverCSV) or clicking the ⭐️ on GitHub!

Installation

CleverCSV is available on PyPI. You can install either the full version, which includes the command line interface and all optional dependencies, using

$ pip install clevercsv[full]

or you can install a lighter, core version of CleverCSV with

$ pip install clevercsv

Usage

CleverCSV consists of a Python library and a command line tool called clevercsv.

Python Library

We designed CleverCSV to provide a drop-in replacement for the built-in CSV module, with some useful functionality added to it. Therefore, if you simply want to replace the builtin CSV module with CleverCSV, you can import CleverCSV as follows, and use it as you would use the builtin csv module.

import clevercsv

CleverCSV provides an improved version of the dialect sniffer in the CSV module, but it also adds some useful wrapper functions. These functions automatically detect the dialect and aim to make working with CSV files easier. We currently have the following helper functions:

  • detect_dialect: takes a path to a CSV file and returns the detected dialect
  • read_table: automatically detects the dialect and encoding of the file, and returns the data as a list of rows. A version that returns a generator is also available: stream_table
  • read_dataframe: detects the dialect and encoding of the file and then uses Pandas to read the CSV into a DataFrame. Note that this function requires Pandas to be installed.
  • read_dicts: detect the dialect and return the rows of the file as dictionaries, assuming the first row contains the headers. A streaming version called stream_dicts is also available.
  • write_table: write a table (a list of lists) to a file using the RFC-4180 dialect.
  • write_dicts: write a list of dictionaries to a file using the RFC-4180 dialect.

Of course, you can also use the traditional way of loading a CSV file, as in the Python CSV module:

import clevercsv

with open("data.csv", "r", newline="") as fp:
  # you can use verbose=True to see what CleverCSV does
  dialect = clevercsv.Sniffer().sniff(fp.read(), verbose=False)
  fp.seek(0)
  reader = clevercsv.reader(fp, dialect)
  rows = list(reader)

Since CleverCSV v0.8.0, dialect detection is a lot faster than in previous versions. However, for large files, you can speed up detection even more by supplying a sample of the document to the sniffer instead of the whole file, for example:

dialect = clevercsv.Sniffer().sniff(fp.read(10000))

You can also speed up encoding detection by installing cCharDet, it will automatically be used when it is available on the system.

That's the basics! If you want more details, you can look at the code of the package, the test suite, or the API documentation. If you run into any issues or have comments or suggestions, please open an issue on GitHub.

Command-Line Tool

To use the command line tool, make sure that you install the full version of CleverCSV (see above).

The clevercsv command line application has a number of handy features to make working with CSV files easier. For instance, it can be used to view a CSV file on the command line while automatically detecting the dialect. It can also generate Python code for importing data from a file with the correct dialect. The full help text is as follows:

usage: clevercsv [-h] [-V] [-v] command ...

Available commands:
  help         Display help information
  detect       Detect the dialect of a CSV file
  view         View the CSV file on the command line using TabView
  standardize  Convert a CSV file to one that conforms to RFC-4180
  code         Generate Python code to import a CSV file
  explore      Explore the CSV file in an interactive Python shell

Each of the commands has further options (for instance, the code and explore commands have support for importing the CSV file as a Pandas DataFrame). Use clevercsv help <command> or man clevercsv <command> for more information. Below are some examples for each command.

Note that each command accepts the -n or --num-chars flag to set the number of characters used to detect the dialect. This can be especially helpful to speed up dialect detection on large files.

Code

Code generation is useful when you don't want to detect the dialect of the same file over and over again. You simply run the following command and copy the generated code to a Python script!

$ clevercsv code imdb.csv

# Code generated with CleverCSV

import clevercsv

with open("imdb.csv", "r", newline="", encoding="utf-8") as fp:
    reader = clevercsv.reader(fp, delimiter=",", quotechar="", escapechar="\\")
    rows = list(reader)

We also have a version that reads a Pandas dataframe:

$ clevercsv code --pandas imdb.csv

# Code generated with CleverCSV

import clevercsv

df = clevercsv.read_dataframe("imdb.csv", delimiter=",", quotechar="", escapechar="\\")

Detect

Detection is useful when you only want to know the dialect.

$ clevercsv detect imdb.csv
Detected: SimpleDialect(',', '', '\\')

The --plain flag gives the components of the dialect on separate lines, which makes combining it with grep easier.

$ clevercsv detect --plain imdb.csv
delimiter = ,
quotechar =
escapechar = \

Explore

The explore command is great for a command-line based workflow, or when you quickly want to start working with a CSV file in Python. This command detects the dialect of a CSV file and starts an interactive Python shell with the file already loaded! You can either have the file loaded as a list of lists:

$ clevercsv explore milk.csv
Dropping you into an interactive shell.

CleverCSV has loaded the data into the variable: rows
>>>
>>> len(rows)
381

or you can load the file as a Pandas dataframe:

$ clevercsv explore -p imdb.csv
Dropping you into an interactive shell.

CleverCSV has loaded the data into the variable: df
>>>
>>> df.head()
                   fn        tid  ... War Western
0  titles01/tt0012349  tt0012349  ...   0       0
1  titles01/tt0015864  tt0015864  ...   0       0
2  titles01/tt0017136  tt0017136  ...   0       0
3  titles01/tt0017925  tt0017925  ...   0       0
4  titles01/tt0021749  tt0021749  ...   0       0

[5 rows x 44 columns]

Standardize

Use the standardize command when you want to rewrite a file using the RFC-4180 standard:

$ clevercsv standardize --output imdb_standard.csv imdb.csv

In this particular example the use of the escape character is replaced by using quotes.

View

This command allows you to view the file in the terminal. The dialect is of course detected using CleverCSV! Both this command and the standardize command support the --transpose flag, if you want to transpose the file before viewing or saving:

$ clevercsv view --transpose imdb.csv

Version Control Integration

If you'd like to make sure that you never commit a messy (non-standard) CSV file to your repository, you can install a pre-commit hook. First, install pre-commit using the installation instructions. Next, add the following configuration to the .pre-commit-config.yaml file in your repository:

repos:
  - repo: https://github.com/alan-turing-institute/CleverCSV-pre-commit
    rev: v0.6.6   # or any later version
    hooks:
      - id: clevercsv-standardize

Finally, run pre-commit install to set up the git hook. Pre-commit will now use CleverCSV to standardize your CSV files following RFC-4180 whenever you commit a CSV file to your repository.

Contributing

If you want to encourage development of CleverCSV, the best thing to do now is to spread the word!

If you encounter an issue in CleverCSV, please open an issue or submit a pull request. Don't hesitate, you're helping to make this project better for everyone! If GitHub's not your thing but you still want to contact us, you can send an email to gertjanvandenburg at gmail dot com instead. You can also ask questions on Gitter.

Note that all contributions to the project must adhere to the Code of Conduct.

The CleverCSV package was originally written by Gertjan van den Burg and came out of scientific research on wrangling messy CSV files by Gertjan van den Burg, Alfredo Nazabal, and Charles Sutton.

Notes

CleverCSV is licensed under the MIT license. Please cite our research if you use CleverCSV in your work.

Copyright (c) 2018-2021 The Alan Turing Institute.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

clevercsv-0.8.1.tar.gz (77.8 kB view details)

Uploaded Source

Built Distributions

clevercsv-0.8.1-cp311-cp311-win_amd64.whl (81.4 kB view details)

Uploaded CPython 3.11 Windows x86-64

clevercsv-0.8.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (109.8 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

clevercsv-0.8.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (109.5 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

clevercsv-0.8.1-cp311-cp311-macosx_11_0_arm64.whl (75.3 kB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

clevercsv-0.8.1-cp311-cp311-macosx_10_9_x86_64.whl (74.9 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

clevercsv-0.8.1-cp311-cp311-macosx_10_9_universal2.whl (84.6 kB view details)

Uploaded CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

clevercsv-0.8.1-cp310-cp310-win_amd64.whl (81.4 kB view details)

Uploaded CPython 3.10 Windows x86-64

clevercsv-0.8.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (105.9 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

clevercsv-0.8.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (105.8 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

clevercsv-0.8.1-cp310-cp310-macosx_11_0_arm64.whl (75.3 kB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

clevercsv-0.8.1-cp310-cp310-macosx_10_9_x86_64.whl (74.8 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

clevercsv-0.8.1-cp310-cp310-macosx_10_9_universal2.whl (84.5 kB view details)

Uploaded CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

clevercsv-0.8.1-cp39-cp39-win_amd64.whl (81.4 kB view details)

Uploaded CPython 3.9 Windows x86-64

clevercsv-0.8.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (105.6 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

clevercsv-0.8.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (105.5 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

clevercsv-0.8.1-cp39-cp39-macosx_11_0_arm64.whl (75.3 kB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

clevercsv-0.8.1-cp39-cp39-macosx_10_9_x86_64.whl (74.8 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

clevercsv-0.8.1-cp39-cp39-macosx_10_9_universal2.whl (84.5 kB view details)

Uploaded CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

clevercsv-0.8.1-cp38-cp38-win_amd64.whl (81.4 kB view details)

Uploaded CPython 3.8 Windows x86-64

clevercsv-0.8.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (107.1 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

clevercsv-0.8.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (107.1 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64 manylinux: glibc 2.5+ x86-64

clevercsv-0.8.1-cp38-cp38-macosx_11_0_arm64.whl (75.3 kB view details)

Uploaded CPython 3.8 macOS 11.0+ ARM64

clevercsv-0.8.1-cp38-cp38-macosx_10_9_x86_64.whl (74.8 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

clevercsv-0.8.1-cp38-cp38-macosx_10_9_universal2.whl (84.5 kB view details)

Uploaded CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)

File details

Details for the file clevercsv-0.8.1.tar.gz.

File metadata

  • Download URL: clevercsv-0.8.1.tar.gz
  • Upload date:
  • Size: 77.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for clevercsv-0.8.1.tar.gz
Algorithm Hash digest
SHA256 8ec5c734c2c1e965c9c2f625d30c5a988b396d0f30697fa090c277505a9d7caf
MD5 b952cf72233281e529a60504a883cd64
BLAKE2b-256 50ebbbc477fe2824e571594ff892d782a5473b903335f2e439f6b5456560e2a7

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for clevercsv-0.8.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 de3b7e6ff42fcf913226c0dd68913c79d048b2502a8d9d11a3c628df098f2dd2
MD5 07a9992f45ee3b11d1b6886f502b5d3c
BLAKE2b-256 3cd5ed2372c7dac6f815b4ef850c00c0186bc6d37267f865a42b33904daf233c

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for clevercsv-0.8.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f0e71195da71f4ee7c1ec0cbcf40684ddf64ad85a95602c4a5709f1b7ffe915e
MD5 4c5e83213281a6a3adc05034ee075835
BLAKE2b-256 306d4908aaab9a6d65e38d1907b5c96aa3874cd908fcb762410951c3527dce5a

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for clevercsv-0.8.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 002d882673ba6ac4c18721b327dc6a5d3e0cc7484904e7e609c845c12e8975dc
MD5 f99362588cdea7125282efdbc7736cd8
BLAKE2b-256 d63471bbdfe79336c1a5d3cba320418d595271c5d87f8a0169c01067886aecfd

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for clevercsv-0.8.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5ed277fe7fd76bf9b6f06fc2b85a2fcd65a22d12ef257755e8b4086b61dfa1d4
MD5 7fc4851e7c1d38200c7b1be6bad0d6ba
BLAKE2b-256 dd7787e8d68dbb13fb8a1374a4e321239ceca0e2c378f954385f29e268418434

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for clevercsv-0.8.1-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 826b87aefadccca5e62b6bc5c44f738c866b9d014664b80c411d724358e8a958
MD5 5e8092fd3ecaf724e8c3df146e5520c9
BLAKE2b-256 76eb0af1026f54cbe4fbb64f0f8f23513a3870232e5b31e0cec03ca9b2dfba38

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp311-cp311-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for clevercsv-0.8.1-cp311-cp311-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 c2960c5dc60d223f08bdd453ad9957d21f18f800520e546d6233e6422b8cd826
MD5 efb92eec7297507f9cf3017e99c19905
BLAKE2b-256 ee94ac001e1706a9146077a55ee087b3df79466d3cb209ad43c52a28d7bf9179

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for clevercsv-0.8.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 65f29fd2e4eda1873b242de2cbfe15ee1aecfe690b0d66fbe9603cd8de7f9939
MD5 73dc6eed37e45442bef7c90ec4bbdee0
BLAKE2b-256 57c14ec0fddf9a8f0794347b08be5310d105f5b7a1732b6f030630e424e56356

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for clevercsv-0.8.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4b0230832aa69c0d0b83bbd62cb2b3a818a2012b4b4be9976dd3600a42c41c2c
MD5 50be444e1b49c80e80e511d6695a857b
BLAKE2b-256 5bae421c935c4424139442fe2aee25223c6efe468b2df43f56e9d64a7a6fb88c

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for clevercsv-0.8.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c442d4441eb0f07d747ef0ff5d73df5bf3e17fe66d010073985abecf3f3103f4
MD5 5a267218e12a275fa03eddf23ba61f1b
BLAKE2b-256 19681eb469322b8952df4d34cf002332d57a5a443344a6e93090b171d0fc9142

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for clevercsv-0.8.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 921158ea887897ac53672e648fcda24581e40ae2e42fbdf540bc7a9e7500cb4e
MD5 88044464932ecf76a477ad553f5e3057
BLAKE2b-256 339797b6b24c34fddc685aa7b19fa97d1adbcab98ec623be707b94cdc49f1be0

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for clevercsv-0.8.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d58aee6771ab38a2a5cf2157cf7bf1b71813e999cff8186e7752fadf2af55e45
MD5 8919b0712299e45ac1b4c211d84ba6ba
BLAKE2b-256 3cb7e3723a6b92b69f8a9741361a817a199a1908880ad8212d0c175094619485

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp310-cp310-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for clevercsv-0.8.1-cp310-cp310-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 8ca6221f998972e6801b1b1df2f3fff260fbe8ce895e35e82539dd22fec55826
MD5 066e57fdc8a709f8b7a5122b5b244c16
BLAKE2b-256 9f109223daf39f74eab55181a6e4f2d84f73ee222d679dd0dbd7bf8dc2c37ce2

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: clevercsv-0.8.1-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 81.4 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for clevercsv-0.8.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 5ad323dc26ef05318b7f71132b0e9852a9ceb6d182a6b771cf35e5b67866808c
MD5 9fa5d403425f667a21d628f3415202e1
BLAKE2b-256 32deb41601b18eee83a92ecded0bf1d09ef5ae72a917d23485749ab98944d9af

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for clevercsv-0.8.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0ba05c833b603d9bab0ff49e106ca217ea120ef9a435f2c6fd42d76725137714
MD5 31aeb09af6c338938e91565fa0e0188a
BLAKE2b-256 b31740d596ae1c48310980c16716d668576b6dba1d3ab6999b7ee9b27315c78c

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for clevercsv-0.8.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a2316cc71b72328a7afa13d64b3992856159f57afcf0c58bbad4021ce8cb38c1
MD5 1b36e43ca5a86394331be732b18ee823
BLAKE2b-256 6d46eb8625faaf1d5d2fe49ad1acd221229fdd682f909ca8cc731a772253b8ad

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for clevercsv-0.8.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6f82d92a34c1bec671459ec67f78588c1131b10e848fcb1450ef2954093943c3
MD5 edc153fb140abc4c294050ec1a9834e1
BLAKE2b-256 5d67de2a62f5762e80f30e466ce3fe67e6dc216403902042b43a09b5e2244f61

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for clevercsv-0.8.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 210e0f916a603c2911933594aa76169d3b55c12ec14b2d005412356df1028bf3
MD5 75630535a4e43107f38a93916bae8331
BLAKE2b-256 951a64f3ae4fcf29aa474e94dc67f6ab5076f19c96735f4e9f11ed65cd62bd16

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp39-cp39-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for clevercsv-0.8.1-cp39-cp39-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 c8779e2a763325d44807216522dd736ab3f632a28eb17ef76471939316da1b80
MD5 8b83dc803bf3568a33662279179bdaba
BLAKE2b-256 02b6a31eae6d2052e5719b31b15829477ede0e078067f8cf0f33026209fc639c

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: clevercsv-0.8.1-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 81.4 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for clevercsv-0.8.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 def2fee9d6a2eb7aa1b1215e2edac20d0ae509ad7795d631a784f16b8cf024bc
MD5 f45ad7003ed8d4e34fa2ec3513d24bb1
BLAKE2b-256 c56b8f45573300e918df9e4ed8f8e173c874826315a1fc23e7fd696813c6209e

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for clevercsv-0.8.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 67f3866de44519303c1e5aeb729ddb1533e701e437d2542afca29acffd61481d
MD5 07bc4b265cfa239aacb4f03207a5bfe4
BLAKE2b-256 27386337e3df43e4bc5104d30e73e365186b3c0d1447c7c7d3c6d657a72e1add

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for clevercsv-0.8.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 3350f0d76952f240b074f92e90d7cb29f80b54ce68a7aae5e91a806986d51d1d
MD5 b492ac151260adcf7927ea14001659c2
BLAKE2b-256 155842f7b479d338638763cfbad35b910aa35297a26ce24bf63c073feb957dcc

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for clevercsv-0.8.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8452b6990e67a8984311548e0dcf25d02646d837b30bff68a0d58481213d614c
MD5 ef2a636c27cb51d68660ceb38190b0f6
BLAKE2b-256 17ec32277db0418ba590a01cc12de0cdacf5de8b4bf33d7b1bbf5c17b22ced74

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for clevercsv-0.8.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 551b7069f0d7100bd83215de45af7beb50a09da511c6a37a6b1adb488dc1494c
MD5 1c936b755b133eb741efb223ec360dba
BLAKE2b-256 a4cf6d87da865c8ef7b5276e882fc33951361b4786cf434e691cd324c3f96d42

See more details on using hashes here.

File details

Details for the file clevercsv-0.8.1-cp38-cp38-macosx_10_9_universal2.whl.

File metadata

File hashes

Hashes for clevercsv-0.8.1-cp38-cp38-macosx_10_9_universal2.whl
Algorithm Hash digest
SHA256 d718fdb4f6e30a0a58e7fc2be937ae4c205d28d4d78b3f8686d88a1438ca088d
MD5 5b150d66193994e25832e80df65d72dc
BLAKE2b-256 51c0ed436c30337464c509069020dfd499bbf77b503d0de125ed93dcf80c9570

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page