Skip to main content

在两个 CSV 文件之间生成差异。

项目描述

https://badge.fury.io/py/csvdiff.png https://travis-ci.org/larsyencken/csvdiff.png?branch=master

概述

在命令行上生成两个 CSV 文件之间的差异。

csvdiff允许您比较两个 CSV 文件的语义内容,忽略行和列排序等内容,以了解实际更改的内容。如果您要比较自动系统一天到一天的输出,这很有用,这样您就可以查看发生了什么变化。

它对于维护第三方数据的补丁也很有用。由csvdiff生成的差异是 JSON 的子集,可以使用匹配的csvpatch命令存储和应用。如果上游数据发生变化,您可以获取新版本并轻松地重新应用您的更改。

安装

你首先需要 Python 和 pip。然后运行:

pip install csvdiff

例子

例如,假设我们有a.csv

id,name,amount
1,bob,20
2,eva,63
3,sarah,7
4,jeff,19
6,fred,10

在对数据进行一些更改和更正之后,我们现在有了b.csv

id,name,amount
1,bob,23       <--- changed
3,sarah,7
4,jeff,19
5,mira,81      <--- added
6,fred,13      <--- changed

现在我们可以要求对差异进行总结:

$ csvdiff --style=summary id a.csv b.csv
1 rows removed (20.0%)
1 rows added (20.0%)
2 rows changed (40.0%)

或者查看完整的 diff 漂亮打印,使其更具可读性:

$ csvdiff --style=pretty --output=diff.json id a.csv b.csv
$ cat diff.json
{
  "_index": [
    "id"
  ],
  "added": [
    {
      "amount": "81",
      "id": "5",
      "name": "mira"
    }
  ],
  "changed": [
    {
      "fields": {
        "amount": {
          "from": "20",
          "to": "23"
        }
      },
      "key": [
        "1"
      ]
    },
    {
      "fields": {
        "amount": {
          "from": "10",
          "to": "13"
        }
      },
      "key": [
        "6"
      ]
    }
  ],
  "removed": [
    {
      "amount": "63",
      "id": "2",
      "name": "eva"
    }
  ]
}

如果要忽略比较中的列,则可以通过指定要忽略的列名的逗号分隔列表来实现。例如:

$ csvdiff --style=summary --ignore-columns=amount id a.csv b.csv
1 rows removed (20.0%)
1 rows added (20.0%)
0 rows changed (0%)

您还可以选择仅比较特定数量的有效数字的数字字段。对数量级使用负有效数字:

$ csvdiff --style=summary id a.csv c.csv
0 rows removed (0.0%)
0 rows added (0.0%)
2 rows changed (40.0%)
$ csvdiff --style=summary id --significance=-1 a.csv c.csv
files are identical

以这种方式生成的差异包含所有已更改的数据,并且可以在原始数据更改后重新应用。例如,假设更多数据被添加到a.csv中,得到a-plus.csv

id,name,amount
1,bob,20
2,eva,63
3,sarah,7
4,jeff,19
6,fred,10
8,亨利,9

我们可以使用csvpatch命令重新应用我们的更改:

$ csvpatch --input=diff.json --output=b-plus.csv a-plus.csv
$ cat b-plus.csv
id,name,amount
1,bob,23
3,sarah,7
4,jeff,19
5,mira,81
6,fred,13
8,henry,9

如果您使用 csvdiff 来转换您无法控制的数据,这会很有用。在这种情况下,您维护补丁文件并在上游数据提供者为您提供新文件时简单地重新应用它。

有关更多使用选项,请运行csvdiff --helpcsvpatch --help

执照

BSD 许可证

历史

0.3.3 (2017-07-20)

  • 添加 –significance 选项以限制有效数字。

0.3.2 (2017-07-20)

  • 为不同的分隔符添加 –sep 选项。

  • 修复修补后的文档变空时的错误 (#29)。

0.3.1 (2016-04-20)

  • 修复摘要模式中的错误。

  • 检查行相互渗入。

0.3.0 (2015-01-07)

  • 使用 JSON 模式标准化补丁格式。

  • 提供应用差异的匹配 csvpatch 命令。

  • 为 csvpatch 添加手册页和文档。

  • 使用退出代码来表示差异。

  • 向 csvdiff 添加一个 –quiet 选项。

0.2.0 (2014-12-30)

  • 使用 click 作为命令行界面。

  • 放弃对 YAML 的支持,转而使用打印精美的 JSON。

  • 使用 –style 选项更改输出样式。

  • 提供完整的手册页。

0.1.0 (2014-03-15)

  • PyPI 上的第一个版本。

  • 在两个 CSV 文件之间生成 JSON 或 YAML 差异

  • 使用-k指定多个关键组件

  • 可以提供差异总结

  • 假设文件使用标准逗号分隔、双引号和带有字段名称的标题行

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

csvdiff-0.3.3.tar.gz (27.2 kB 查看哈希

已上传 source

内置分布

csvdiff-0.3.3-py2.py3-none-any.whl (12.9 kB 查看哈希

已上传 3 5