比较 2 个 CSV 文件(编码 = "utf8" )保持数据格式



我有2个股票列表(新旧(。如何比较它以查看已添加的项目和已删除的项目(很高兴将它们添加到添加和删除的 2 个不同文件中(?

到目前为止,我已经厌倦了一排一排地看。

import csv
new = "new.csv"
old = "old.csv"
add_file = "add.csv"
remove_file = "remove.csv"
with open(new,encoding="utf8") as new_read, open(old,encoding="utf8") as old_read:
new_reader = csv.DictReader(new_read)
old_reader = csv.DictReader(old_read)
for new_row in new_reader :
for old_row in old_reader:
if old_row["STOCK CODE"] == new_row["STOCK CODE"]:
print("found")

这适用于 1 个项目。 如果我添加一个 *else: * 它只是继续打印它,直到找到它。因此,这不是比较文件的准确方法。

我有 5k 值的行。

一定有更好的方法将差异添加到 2 个不同的文件中并同时保持相同的数据结构?

注意我已经厌倦了这个链接 Python :比较两个 csv 文件并打印出差异 2 个小问题: 1.数据结构不保留 2. 没有提及地点的变更

您可以将数据读入内存,然后进行比较。 我在此示例中对代码使用了集合,以便更快地查找。

import csv
def get_csv_data(file_name):
data = []
codes = set()
with open(file_name, encoding="utf8") as csv_file:
reader = csv.DictReader(csv_file)
for row in reader:
data.append(row)
codes.add(row['STOCK CODE'])
return data, codes
def write_csv(file_name, data, codes):
with open(file_name, 'w', encoding="utf8", newline='') as csv_file:
headers = list(data[0].keys())
writer = csv.DictWriter(csv_file, fieldnames=headers)
writer.writeheader()
for row in data:
if row['STOCK CODE'] not in codes:
writer.writerow(row)
new_data, new_codes = get_csv_data('new.csv')
old_data, old_codes = get_csv_data('old.csv')
write_csv('add.csv', new_data, old_codes)
write_csv('remove.csv', old_data, new_codes)

最新更新