Arg*_*kas 3 csv comparison command-line command-line-interface
我目前正在使用一个名为TableTexCompare的 Windows 实用程序
该工具可以获取 2 个 CSV 文件并进行比较。它的好处是,即使两个文件的记录排序不一样或者字段的位置不一样,它也可以进行比较。
因此,以下 2 个文件将导致成功比较
(文件1.csv)
FirstName,LastName,Age
Mona,Sax,30
Max,Payne,43
Jack,Lupino,50
Run Code Online (Sandbox Code Playgroud)
(文件2.csv)
FirstName,Age,LastName
Max,43,Payne
Jack,50,Lupino
Mona,30,Sax
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是从命令行做同样的事情,只有 1 个区别:我希望仅在一个方向上执行比较,即如果 File2.csv 如下(File1.csv 的子集) ,比较应该通过
(文件2.csv)
FirstName,Age,LastName
Jack,50,Lupino
Run Code Online (Sandbox Code Playgroud)
我并不特别关心它是否采用某种编程语言、专用的 cli 工具或 shell 脚本(例如使用 awk)。我对 Java 和 Groovy 有一些经验,但希望得到一些初步的指导。
我可以提供一个Python解决方案:
import csv
with open("file1.csv") as f1, open("file2.csv") as f2:
r1 = list(csv.DictReader(f1))
r2 = csv.DictReader(f2)
for item in r2:
if not item in r1:
print("r2 is not a subset of r1!")
break
Run Code Online (Sandbox Code Playgroud)
这实际上比 Python 中必要的更加冗长(但更容易理解);我个人会使用生成器表达式:
import csv
with open("file1.csv") as f1, open("file2.csv") as f2:
r1 = list(csv.DictReader(f1))
r2 = csv.DictReader(f2)
if all(item in r1 for item in r2):
print("r2 is a subset of r1")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6712 次 |
| 最近记录: |