第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何比較2個(gè)不同的csv文件并輸出差異

如何比較2個(gè)不同的csv文件并輸出差異

揚(yáng)帆大魚(yú) 2023-12-12 15:18:46
我有 2 個(gè) CSV,分別是 New.csv 和 Old.csv,它們大約有 1K 行和 10 列,其結(jié)構(gòu)如下:如果 new.csv 中有一個(gè) longName(第一列),而 old.csv 中沒(méi)有,我希望將整個(gè) new.csv 行附加到changes.csv。我一開(kāi)始就這樣做,但它根本不起作用: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 但找不到將其輸出轉(zhuǎn)換為 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 回答

?
叮當(dāng)貓咪

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個(gè)贊

你看過(guò)嗎csv-diff?他們的網(wǎng)站有一個(gè)可能合適的示例:

from csv_diff import load_csv, compare

diff = compare(

? ? load_csv(open("one.csv"), key="id"),

? ? load_csv(open("two.csv"), key="id")

)

這應(yīng)該返回一個(gè)dict對(duì)象,您可以將其解析為 CSV 文件。要將字典解析為行,這是一個(gè)示例。注意:正確編寫(xiě)更改很困難,但這更多的是概念驗(yàn)證 - 根據(jù)您的意愿進(jìn)行修改


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)

對(duì)于文件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

運(yùn)行此命令會(huì)產(chǎn)生:


change type,? ? ?name, id,? ? ? ? ? ? ? ?changes, age, key

? ? ? added,? ?Bailey,? 3,? ? ? ? ? ? ? ? ? ? ? ,? ?1,

? ? ? added,? ?Elliot,? 4,? ? ? ? ? ? ? ? ? ? ? ,? 10,

? ? removed, Pancakes,? 2,? ? ? ? ? ? ? ? ? ? ? ,? ?2,

? ? changed,? ? ? ? ?,? ?, "{'age': ['4', '5']}",? ? ,? ?1

因此并不適合所有更改,但對(duì)于添加/刪除的行非常有效。


查看完整回答
反對(duì) 回復(fù) 2023-12-12
  • 1 回答
  • 0 關(guān)注
  • 198 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)