1 回答

TA貢獻1776條經驗 獲得超12個贊
你看過嗎csv-diff
?他們的網站有一個可能合適的示例:
from csv_diff import load_csv, compare
diff = compare(
? ? load_csv(open("one.csv"), key="id"),
? ? load_csv(open("two.csv"), key="id")
)
這應該返回一個dict對象,您可以將其解析為 CSV 文件。要將字典解析為行,這是一個示例。注意:正確編寫更改很困難,但這更多的是概念驗證 - 根據您的意愿進行修改
from csv_diff import load_csv, compare
from csv import DictWriter
# Get all the row headers across all the changes
headers = set({'change type'})
for key, vals in diff.items():
? ? for val in vals: # Multiple of the same difference 'type'
? ? ? ? headers = headers.union(set(val.keys()))
# Write changes to file
with open('changes.csv', 'w', encoding='utf-8') as fh:
? ? w = DictWriter(fh, headers)
? ? w.writeheader()
? ? for key, changes in diff.items():
? ? ? ? for val in changes: # Add each instance of this type of change
? ? ? ? ? ? val.update({'change type': key}) # Add 'change type' data
? ? ? ? ? ? w.writerow(val)
對于文件one.csv:
id,? ? ?name, age
?1,? ? ?Cleo,? ?4
?2, Pancakes,? ?2
和two.csv:
id,? ?name, age
?1,? ?Cleo,? ?5
?3, Bailey,? ?1
4,? Elliot,? 10
運行此命令會產生:
change type,? ? ?name, id,? ? ? ? ? ? ? ?changes, age, key
? ? ? added,? ?Bailey,? 3,? ? ? ? ? ? ? ? ? ? ? ,? ?1,
? ? ? added,? ?Elliot,? 4,? ? ? ? ? ? ? ? ? ? ? ,? 10,
? ? removed, Pancakes,? 2,? ? ? ? ? ? ? ? ? ? ? ,? ?2,
? ? changed,? ? ? ? ?,? ?, "{'age': ['4', '5']}",? ? ,? ?1
因此并不適合所有更改,但對于添加/刪除的行非常有效。
添加回答
舉報