我有2个CSV,分别是New. csv和Old. csv,它们大约有1K行和10列,结构如下:
如果新. csv中有一个longName(第一列),而旧. csv中没有,我希望将整个新. 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()
执行此操作:
1条答案
按热度按时间gcuhipw91#
您看过
csv-diff
吗?他们的website有一个可能合适的示例:这将返回一个
dict
对象,您可以将其解析为CSV文件。要将 that dict解析为行,请使用以下示例。* 注意:正确编写更改是很困难的,但这更像是一种概念验证-根据您的意愿进行修改 *对于文件
one.csv
:和
two.csv
:运行此命令将生成:
所以并不是对所有的更改都很好,但是对添加/删除的行非常有效。