python - 查找两个 csv 文件中列名之间的差异?

标签 python csv awk

我有两个 csv 文件,它们的第一行是列的名称。 我想diff他们的列名集,即找出

  • 两个文件是否有相同的列名集(列的顺序无关紧要),以及

  • 如果他们不这样做,一个文件中有什么列名而另一个文件中没有..

是否可以使用 awk 或 Linux 中的其他文本处理实用程序来做到这一点? 还是使用 Python 更好?

例如假设一个文件看起来像

col2,col1,col3
1,2,3
4,5,6

另一个文件看起来像

col3,col2,col4
2,3,4
5,6,7

那么在第一个文件中但在第二个文件中不存在的列名是col1,在第二个文件中但不在第一个文件中的列名是col4

最佳答案

在 Python 中,首先使用 csv.reader 保存每个文件的标题行:

import csv
with open('one.csv', newline='') as f1, open('two.csv', newline='') as f2:
    one = set(next(csv.reader(f1)))
    two = set(next(csv.reader(f2)))

然后就可以使用set操作了。

是否相同:

one == two

two 有但 one 没有的列:

two - one

one 有但 two 没有的列:

one - two

为了好玩,两个文件都有的列:

one & two

以及任一文件中的所有可用列:

one | two

关于python - 查找两个 csv 文件中列名之间的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34763396/

相关文章:

bash - 需要使用 bash 和 awk 计算数组的标准差吗?

python - 将 Pygame 与 PyPy 结合使用

r - 为具有相同 'tidy' 格式和大小的不断变化的输入 csv 文件有效地创建 data.frames

python - 有没有办法在 python 中自动生成 __str__() 实现?

python - 读取 Fernet Key 导致 ValueError : Fernet key must be 32 url-safe base64-encoded bytes

java - 如何从 .csv 文件向 JTable 中的列添加标题

ruby - 解析文本文件行

ruby - 与 awk 的 RS、NF 和 OFS 等价的 Ruby 单行代码是什么?

python - Python 函数式编程最佳实践的静态分析?

python - 我可以在 Web2Py 中包含局部 View ,将特定变量传递给它吗?