我有两个csv,分别是New.csv和Old.csv,它们有大约1K行和10列,结构如下:
如果new.csv中有一个longName(第一列),而不是old.csv中的longName,我希望将整个new.csv行追加到changes.csv中
我一开始是这样做的,但根本不起作用:
def deltaFileMaker():
with open('Old.csv', 'r', encoding='utf-8') as t1, open('New.csv', 'r', encoding='utf-8') as t2:
fileone = t1.readlines()
filetwo = t2.readlines()
with open('changes.csv', 'w', encoding='utf-8') as outFile:
for line in filetwo:
if line not in fileone:
outFile.write(line)
deltaFileMaker()
我还尝试使用csv diff,但我找不到将其输出转换为csv文件的方法
更新
def deltaFileMaker():
from csv_diff import load_csv, compare
diff = compare(
load_csv(open("old.csv",encoding="utf8"), key="longName"),
load_csv(open("new.csv",encoding="utf8"), key="longName")
)
with open('changes.csv', 'w',encoding="utf8") as f:
w = csv.DictWriter(f, diff.keys())
w.writeheader()
w.writerow(diff)
deltaFileMaker()
你看过
csv-diff
吗?他们的website有一个可能合适的例子:这将返回一个
dict
对象,您可以将其解析为CSV文件。要将的dict解析为行,下面是一个示例注意:要正确编写更改是很困难的,但这更像是一个概念证明-根据您的意愿进行修改对于文件
one.csv
:和
two.csv
:运行此命令将产生:
因此,并非所有更改都很好,但对于添加/删除的行来说效果非常好
相关问题 更多 >
编程相关推荐