用于处理杂乱CSV文件的Python包
项目描述
CleverCSV为Python的 csv
包提供了一种即插即用的替代方案,用于改善杂乱CSV文件的方言检测。它还提供了一个方便的命令行工具,可以标准化杂乱文件或生成导入它的Python代码。
有用的链接
- CleverCSV在Github上
- CleverCSV在PyPI上
- ReadTheDocs上的文档
- Binder上的CleverCSV演示(交互式!)
- CSV方言检测研究论文(PDF)
- 可重复研究存储库
- 关于杂乱CSV文件的博客文章
- 讨论论坛:提问和分享想法的地方!
内容: 快速入门 | 介绍 | 安装 | 使用 | Python库 | 命令行工具 | 版本控制集成 | 贡献 | 注意
快速入门
点击此处 了解更多关于CleverCSV的介绍。如果您急于开始,以下是使用CleverCSV Python包和命令行界面的快速概述。
对于Python包
# 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.pythonlang.cn/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)
对于命令行界面
# 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
介绍
- CSV文件很棒!它们轻量级、易于分享、可读性强、支持版本控制,并由许多系统和工具支持!
- CSV文件真是糟糕!它们可能有多种不同的格式,多个表格,有或没有表头,转义字符,而且没有记录元数据的支持!
CleverCSV是一个Python包,旨在解决CSV文件的一些痛点,同时保留了许多优点。该包能够自动检测(高精度)CSV文件的格式(方言),因此可以简单地指向CSV文件并加载它,无需人工检查。未来,我们希望解决CSV文件的其它一些问题。
CleverCSV是基于科学的(基于科学)。我们调查了成千上万的实际CSV文件,以找到一种稳健的方法来自动检测文件的方言。这听起来可能很简单,但对于计算机来说,CSV文件只是长字符串,每个方言都会给你提供一些表格。在CleverCSV中,我们使用基于解析文件行长度模式和单元格数据类型的模式的技术。使用我们的方法,我们在方言检测上达到了97%的准确性,与非标准的(混乱的)CSV文件相比,比Python标准库提高了21%。
我们认为这项工作对数据科学家和程序员非常有价值,我们希望您发现CleverCSV很有用(如果有问题,请提出问题!)学术界计算引用,请在您使用该包时引用CleverCSV。这里有一个您可以使用的BibTeX条目
@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},
}
当然,如果您喜欢这个包,请传播信息!您可以通过Twitter讨论它(#CleverCSV)或在GitHub上点击⭐️(GitHub)!
安装
CleverCSV可在PyPI上获取。您可以使用以下方式安装完整版本,它包括命令行界面和所有可选依赖项:
$ pip install clevercsv[full]
或者,您可以使用CleverCSV的更轻量级的核心版本,方法是:
$ pip install clevercsv
用法
CleverCSV由一个Python库和一个名为clevercsv
的命令行工具组成。
Python库
我们设计CleverCSV,以便提供内置CSV模块的替换方案,并增加了有用的功能。因此,如果您只想用CleverCSV替换内置的CSV模块,您可以按如下方式导入CleverCSV,并像使用内置的csv模块一样使用它。
import clevercsv
CleverCSV提供了CSV模块中方言嗅探器的改进版本,但它还添加了一些有用的包装函数。这些函数自动检测方言,旨在使处理CSV文件变得更加容易。我们目前有以下辅助函数
- detect_dialect:接受CSV文件的路径并返回检测到的方言
- read_table:自动检测文件的语言和编码,并将数据作为行列表返回。还有一个返回生成器的版本:stream_table
- read_dataframe:检测文件的语言和编码,然后使用Pandas将CSV读入DataFrame。请注意,此函数需要安装Pandas。
- read_dicts:检测方言,并将文件行作为字典返回,假设第一行包含标题。还有一个名为stream_dicts的流版本。
- write_table:使用RFC-4180方言将一个表格(一个列表的列表)写入文件。
- write_dicts:使用RFC-4180方言将字典列表写入文件。
当然,您也可以使用传统的CSV文件加载方式,如Python的CSV模块。
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)
CleverCSV v0.8.0版本以来,方言检测速度比之前版本快得多。但是,对于大文件,您可以通过向sniffer提供文档样本而不是整个文件来进一步加快检测速度,例如。
dialect = clevercsv.Sniffer().sniff(fp.read(10000))
您还可以通过安装cCharDet来加快编码检测,当系统上有可用时,它将自动使用。
这就是基础知识!如果您想了解更多细节,可以查看该软件包的代码、测试套件或API文档。如果您遇到任何问题或有任何评论或建议,请在GitHub上提交一个问题。
命令行工具
要使用命令行工具,请确保您已安装CleverCSV的全版本(见上方)。
clevercsv
命令行应用程序提供了一些方便的功能,以使处理CSV文件更加容易。例如,它可以用于在命令行上查看CSV文件,同时自动检测方言。它还可以生成导入具有正确方言的文件的Python代码。完整帮助文本如下。
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
每个命令都有进一步的选择(例如,code
和explore
命令支持将CSV文件作为Pandas DataFrame导入)。使用clevercsv help <command>
或man clevercsv <command>
获取更多信息。以下是一些每个命令的示例。
请注意,每个命令都接受-n
或--num-chars
标志来设置用于检测方言的字符数。这在大文件上加快方言检测速度非常有用。
代码
代码生成在您不想反复检测相同文件的方言时非常有用。您只需运行以下命令,然后将生成的代码复制到Python脚本中即可!
$ 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)
我们还有一个版本可以读取Pandas dataframe。
$ clevercsv code --pandas imdb.csv
# Code generated with CleverCSV
import clevercsv
df = clevercsv.read_dataframe("imdb.csv", delimiter=",", quotechar="", escapechar="\\")
检测
检测在您只想知道方言时非常有用。
$ clevercsv detect imdb.csv
Detected: SimpleDialect(',', '', '\\')
--plain
标志将方言的组件分别放在不同的行上,这使得与grep
结合更加容易。
$ clevercsv detect --plain imdb.csv
delimiter = ,
quotechar =
escapechar = \
探索
explore
命令非常适合基于命令行的流程,或者当您想快速开始在Python中处理CSV文件时。此命令检测CSV文件的方言,并启动一个交互式Python外壳,其中已加载文件!您可以选择将文件加载为列表的列表
$ clevercsv explore milk.csv
Dropping you into an interactive shell.
CleverCSV has loaded the data into the variable: rows
>>>
>>> len(rows)
381
或您可以将其加载为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]
标准化
当您想要使用RFC-4180标准重写文件时,请使用standardize
命令。
$ clevercsv standardize --output imdb_standard.csv imdb.csv
在此特定示例中,转义字符的使用被替换为使用引号。
查看
此命令允许您在终端中查看文件。当然,使用CleverCSV检测方言!此命令和standardize
命令都支持--transpose
标志,如果您想在查看或保存之前转置文件。
$ clevercsv view --transpose imdb.csv
版本控制集成
如果您想确保永远不会将杂乱(非标准)的CSV文件提交到您的代码库,您可以安装一个pre-commit钩子。首先,按照安装说明安装pre-commit。接下来,将以下配置添加到您代码库中的.pre-commit-config.yaml
文件中
repos:
- repo: https://github.com/alan-turing-institute/CleverCSV-pre-commit
rev: v0.6.6 # or any later version
hooks:
- id: clevercsv-standardize
最后,运行pre-commit install
以设置git钩子。现在,每当您将CSV文件提交到代码库时,Pre-commit将使用CleverCSV按照RFC-4180进行标准化。
贡献
如果您想鼓励CleverCSV的开发,现在最好的做法是传播这个信息!
如果您在CleverCSV中遇到问题,请打开一个问题或提交一个拉取请求。不要犹豫,您正在帮助使这个项目对每个人来说都更好!如果您不喜欢GitHub但仍然想联系我们,您也可以通过发送电子邮件到gertjanvandenburg at gmail dot com
来代替。您还可以在Gitter上提问。
请注意,所有对项目的贡献都必须遵守行为准则。
CleverCSV软件包最初由Gertjan van den Burg编写,并源于Gertjan van den Burg、Alfredo Nazabal和Charles Sutton关于整理杂乱CSV文件的科学研究。
注释
CleverCSV采用MIT许可。如果您在工作中使用了CleverCSV,请引用我们的研究。
版权(c)2018-2021 艾伦·图灵研究所。
项目详情
下载文件
下载适合您平台的应用程序文件。如果您不确定要选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
哈希值 for clevercsv-0.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8b68a7fbddef0e1746d3ec5e4d114e1900eb1a86d71250b0b208622daa5d2c7c |
|
MD5 | 3468aca38268e77bee5009ec8539bf01 |
|
BLAKE2b-256 | 5879064318d0867d0a80206bd7ea35810628f15244abb6270c1653cbc7f40099 |
哈希值 for clevercsv-0.8.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9cb807e7bea5a18cca4d51d1abc58e2f975759b7a0bcb78e1677c56ac7827e9a |
|
MD5 | e841744d67023f073ec400bcec3b310f |
|
BLAKE2b-256 | dcaffd362e6064eb2ade6db32efc3a4c84492b18a458ae0542dd1df425b57b69 |
哈希值 for clevercsv-0.8.2-cp312-cp312-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8832093b49defb2f224a98158265fe0bbee9ed6a70a8105cf8d7c4b949a8e95b |
|
MD5 | 14eb917d7d2b61dd20a430689cce657c |
|
BLAKE2b-256 | 78584fce720ae9396c60d60a04e8952cb3e33ad50ae9fb640afe1366b6843bd1 |
哈希值 for clevercsv-0.8.2-cp312-cp312-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3e2528f89ee483878c3c8030a2d2da4eef2a8a7ac3036adad0767c1025a99df7 |
|
MD5 | 8c8136b4ac1ad82df01664b97d665998 |
|
BLAKE2b-256 | 02ee2ab6db72ca337da30e414aa12f1cde36acbab7a515e272483e301195e6aa |
哈希值 for clevercsv-0.8.2-cp312-cp312-macosx_10_9_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2bfa4fe39b3b51bcf07d2f8cf033d7ac53bac5292ef7b9a88bae7c9e6689f366 |
|
MD5 | 24d5de42a96ef70de1d6d3c33cd57a5d |
|
BLAKE2b-256 | 0f355168712a4100d3c7b2c397b14cdf9fba7cca4eee758e0cc0792244bc3095 |
哈希值 for clevercsv-0.8.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1b942ee944264e5c4dbf276de579a502d11d3571daec97af5ebe54e6cadf2b77 |
|
MD5 | 3f85fa69695feb1cb7cf821a8a20b598 |
|
BLAKE2b-256 | 6eceeeb242b0c2dda4229bd542d3f4079d7e3a3a74a8a518d7e5dff2ba8d057a |
哈希值 for clevercsv-0.8.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 48a8a81c1f324e2a5589e0de9b6bd965f1dd19b54b0e9e7f97cab5edf888d486 |
|
MD5 | 6cbac61717ffc66a43997bbf6d63114e |
|
BLAKE2b-256 | 53be6992834496c6ab6c62a3af592b717c66c4a170e5fe2abc8274e2abd93ee7 |
哈希值 for clevercsv-0.8.2-cp311-cp311-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1be9c6f2e73117a77d0b0491c07738fd177ba5e2bf996ac9a221417b223162d7 |
|
MD5 | 0ba1fe4720ca91741b2512a7bc4a90f6 |
|
BLAKE2b-256 | b0ce385990e0492fe6512b182a52b6f2714e16e15d2e181f26cbcd01c22ae2b0 |
哈希值 for clevercsv-0.8.2-cp311-cp311-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1ed99467ba2d47a2e1e81e990f74c7542d2cd0da120d922c5c992c17ac3ba026 |
|
MD5 | 7f8e9ee9f1a7cd163eeecd9e02063593 |
|
BLAKE2b-256 | a01ff3065c5e5156d7e97925af418be373562e3b6de652dc6b3331c0fe53c95a |
哈希值 for clevercsv-0.8.2-cp311-cp311-macosx_10_9_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3502c7af7a4b7a50b923a5972a9357ae2a37aa857dd96c7489c201d104e5d0b9 |
|
MD5 | bcd524f26688c1cce94c67da44546255 |
|
BLAKE2b-256 | ea5faf22e01d37bd7db1c67566ac169bbdb522cd5a3a7ec8ff5ec063034b2b1c |
哈希值 for clevercsv-0.8.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 755369a540d40295ea2898343c44dc8a4886e7c9e2fd5f5a780d2995a5516e1d |
|
MD5 | 7d97b9b545430fa1c676ec9dd2417bee |
|
BLAKE2b-256 | b2b3530a7d79e9d046f87a17631d1721a86c194a7452fc850818c09afeeb3950 |
哈希值 for clevercsv-0.8.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0fe155a8e39160692869f3b9b8a8bca9ba215cc350b9c804437edaa90ede4d16 |
|
MD5 | 8e542f7cbebd0b7b4783dde359cc24dc |
|
BLAKE2b-256 | 9bde31e1cd99a7de986aa6fe9d0b5fc15640313cc11fa8c02d0911759bcc6743 |
哈希值 for clevercsv-0.8.2-cp310-cp310-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7a65d9722303e3db439124418ee312fcab6a75897175842690eae94bdf51b72b |
|
MD5 | 3e2201418048aaeb857a56f04824bfe0 |
|
BLAKE2b-256 | ede0e011c6df3bdd8fc8cbe97de17076039b5adde5dfd95b960e525d2b4f71ec |
哈希值 for clevercsv-0.8.2-cp310-cp310-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | bcf2402578f2f1c655ed21370e668f44098d9734129804f0fba1779dab7f2c47 |
|
MD5 | b634c1be06d61b62ae7e429283ff1360 |
|
BLAKE2b-256 | 2df2fdfbc51ca6aaddc16b296730bafd6086426af202de370b043952efbd62c1 |
哈希值 for clevercsv-0.8.2-cp310-cp310-macosx_10_9_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 67ab7dc8490ed391add1f26db262d09067796be7e76948bde0a9c6f1dddb7508 |
|
MD5 | 9eb471ea58f87f6b04bf0f2889ed95b8 |
|
BLAKE2b-256 | d691989d95b0149bb1b6d30254772ad36094f929cc2762b7adb8ef6e71658df6 |
哈希值 for clevercsv-0.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ff57768d060ac6509dd33a65fa1d2a0fbb70cd62d0075d80a96367a2a9150765 |
|
MD5 | ffb6742b1552c2e4a8a8a9df246a8267 |
|
BLAKE2b-256 | 5d6306877f8f97715641f0b48b669415c0b75f951789c71837482689a25ca184 |
哈希值 for clevercsv-0.8.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7f9514a169270fd095827698d1d5d80a8a3785f600441a11fb3a469ad5209eeb |
|
MD5 | 05d7ac85b999ae6610e7522d1d0b1d5f |
|
BLAKE2b-256 | 1334a062b187d682580a2c18822f49198cedd49898210cb5e205d723f74d1a2f |
哈希值 for clevercsv-0.8.2-cp39-cp39-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 71b88f1181fba6e5f6a46292d27f068bdc50200b5660b82a770adfcfb5ae076e |
|
MD5 | 2147acecbf0c1a0a41cb5ee65ea30deb |
|
BLAKE2b-256 | c91080c51edbc765e2f04fc390852b14fdc94bea83fb36f8a41e3a7684696281 |
哈希值 for clevercsv-0.8.2-cp39-cp39-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 41513c6ff653baded084a96318e4bdc078a9cce4ff5f9b4656d49aa2421e2e74 |
|
MD5 | fa1a764d7e7f01241db47d5b3d3d8bb4 |
|
BLAKE2b-256 | c95937d9b17b2c30e0cd558fbdddaebc69550e6de6c5db5a7865d02c34f28c3e |
哈希值 用于 clevercsv-0.8.2-cp39-cp39-macosx_10_9_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | dcf560e643c1fb37d3523a11b0dfbce0bda63ac831d8c71fa2973b262bc1603f |
|
MD5 | 2604b22caed1288f9a3dfc0a0207dce0 |
|
BLAKE2b-256 | 1569d1c6db68638f8714a1ca2c38c4213e7e710cc80eaef79439501c3d60a215 |
哈希值 用于 clevercsv-0.8.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5bf6058a4930fde2ff00ab82e0ec961247b6e2dd503f67a16f51382b8654cbc2 |
|
MD5 | 08929e77539b98657fa046c664a27f1b |
|
BLAKE2b-256 | b240f61058612ae20c38b5be6f3584ad44b0a8cbe07b7ac9260817247df44db7 |
哈希值 用于 clevercsv-0.8.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0d9f29bb3fb4c0d35416cc0baf9221d1476f3bee4c367c3618f81ac0f45b71af |
|
MD5 | 3363a5d66652ce57ccf7d3d4f69d8918 |
|
BLAKE2b-256 | d9a81282e0bee489c4e63226fd5674eef2cad8d85172a982108b93d9701f3ebf |
哈希值 用于 clevercsv-0.8.2-cp38-cp38-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7f75f46a4d6b75380f2c0b8190fed6fbb7c1400246ce52a71c68f59baf1ec362 |
|
MD5 | fa817090971447e63647fb0cddec28dc |
|
BLAKE2b-256 | 0a472b13c41e9dca52276d47793a14e1af01607269a2139edd8f62fc6c0f139f |
哈希值 用于 clevercsv-0.8.2-cp38-cp38-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c1129f1328c0940b13b9b08a72f04c8b0a85a6a021994999f34cd3abe19ca206 |
|
MD5 | 7d6f82e986ae8316d8e1aa988f6b6719 |
|
BLAKE2b-256 | 915ca16df13ab47a107a45da721af02065763fe18147669cf3d365aa4cf3f84a |
哈希值 用于 clevercsv-0.8.2-cp38-cp38-macosx_10_9_universal2.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cb9241fe5d6a2e3330c52c04fd18b7c279bbdeb7d0ecef8c4267f14336021d78 |
|
MD5 | 9b76f21e8378cfd280a2367016431223 |
|
BLAKE2b-256 | 557c248cdc4dbaadcf3619e52449ec7c287c0fcf9277221c569095b357bacef5 |