首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较2个CSV文件(编码= "utf8")保持数据格式

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

Stack Overflow用户
提问于 2020-01-09 10:58:47
回答 1查看 259关注 0票数 0

我有两个股票列表(新的和旧的)。我如何比较它,看看哪些项目已经添加,哪些已经删除(高兴地将它们添加到两个不同的文件中添加和删除)?

到目前为止,我已经疲惫不堪,一排排地往前看。

代码语言:javascript
复制
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")

这适用于一个项目。如果我添加了一个* its:*它就会一直打印到找到为止。所以这不是比较文件的准确方法。

我有价值5k的行。

必须有更好的方法将差异添加到两个不同的文件中,同时保持相同的数据结构?

注:我已经厌倦了这个链接Python : Compare two csv files and print out differences 2的一些小问题: 1.数据结构没有保存;2.没有参考位置的变化

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-09 11:43:20

您只需将数据读入内存,然后进行比较。为了更快地查找,我在本例中使用了代码集。

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59662442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档