簡體   English   中英

使用python比較CSV文件

[英]Compare CSV files using python

嗨,我需要幫助比較兩個csv文件...並將匹配的記錄從兩個文件轉換為輸出文件...並將不匹配的記錄轉換為另一個輸出文件...例如:我的第一個csv文件包含兩列Name和Salary數據為

A 20000
B 15000
C 10000
D 5000

第二個CSV文件包含名稱和薪水,數據為

A 40000
D 10000
B 15000

我的輸出應該是兩個文件,匹配的文件分別包含來自file1和file2的B 15000 B 15000,而第二個文件包含不匹配的記錄,如

A 20000,A 40000
C 10000,-------(no record in file2)
D 5000, D 10000
f1_in = open("f1.csv","r")
f1_dict = {}
for line in f1_in:
    l = line.split()
    f1_dict[l[0].strip()] = l[1].strip()
f1_in.close()

f2_in = open("f2.csv","r")
f2_dict = {}
for line in f2_in:
    l = line.split()
    f2_dict[l[0].strip()] = l[1].strip()
f2_in.close()

f_same = open("same.txt","w")
f_different = open("different.txt","w")

for k1 in f1_dict.keys():
    if k1 in f2_dict.keys() \
    and f2_dict[k1] == f1_dict[k1]:
        f_same.write("{0}, {1}\n".format(str(k1)+" "+str(f1_dict[k1]),
                                         str(k1)+" "+str(f2_dict[k1])))
    elif not k1 in f2_dict.keys():
        f_different.write("{0}, {1}\n".format(str(k1)+" "+str(f1_dict[k1]),
                                              "------"))
    elif not f2_dict[k1] == f1_dict[k1]:
        f_different.write("{0}, {1}\n".format(str(k1)+" "+str(f1_dict[k1]),
                                              str(k1)+" "+str(f2_dict[k1])))

f_same.close()
f_different.close()

編輯:要按鍵對字典排序,請在對鍵循環之前( for k1 in f1_dict.keys() ):

# get the keys as a list
my_keys = f1_dict.keys()
# sort it
my_keys.sort()
# use sorted list
for k1 in my_keys:

要按值對字典排序,請在循環鍵之前:

# return a list of tuple : [(key1,value1),(key2,value2)]
my_zip = zip(f1_dict.keys(), f1_dict.values())
# now you have a list you can sort it :
my_sorted_list = sorted(my_zip, key=lambda value, value[2])

key=lambda value, value[2]表示my_zip將使用列表中每個元組的第二個值進行排序。

# use sorted list
for t in my_sorted_list:
    # t is a tuple
    k1 = t[0]
    value = t[1]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM