用于处理CSV文件的Python代码

时间:2018-08-09 13:31:43

标签: python pandas csv

我每天都在更新CSV文件。需要根据条件处理和创建新文件-如果将新数据针对该行标记为“新建”,并且如果将其更新为现有数据,则应标记为“更新”。如何根据日期按照以下方式编写Python代码以处理和输出CSV文件。

第1天的输入数据

empid,enmname,sal,datekey
1,cholan,100,8/14/2018
2,ram,200,8/14/2018

第2天输入数据

empid,enmname,sal,datekey
1,cholan,100,8/14/2018
2,ram,200,8/14/2018
3,sundar,300,8/15/2018
2,raman,200,8/15/2018

输出数据

status,empid,enmname,sal,datekey
new,3,sundar,300,8/15/2018
update,2,raman,200,8/15/2018

1 个答案:

答案 0 :(得分:1)

我感觉很好,所以我给你一些代码。尝试从中学到东西。


要使用CSV文件,我们需要csv模块:

import csv

首先,让我们教计算机如何打开和解析CSV文件:

def parse(path):
    with open(path) as f:
        return list(csv.DictReader(f))

csv.DictReader读取csv文件的第一行,并将其用作列的“名称”。然后,它为随后的每一行创建一个字典,其中的键是列名。

这很好,但是我们只想要带有每个键的最新版本:

def parse(path):
    data = {}
    with open(path) as f:
        for row in csv.DictReader(f):
            data[row["empid"]] = row
    return data

这不仅创建了包含所有内容的列表,还创建了一个字典,其中的键是行的ID。这样,文件中较晚的行将覆盖文件中较早的行。

现在,我们已经教会计算机如何从文件中提取数据,让我们开始吧:

old_data = parse("file1.csv")
new_data = parse("file2.csv")

遍历字典将为您提供其键,这些键是数据集中定义的ID。为了保持一致性,key in dictionary表示key是否是字典中的键之一。因此,我们可以这样做:

new = {
    id_: row
    for id_, row in new_data.items()
    if id_ not in old_data
}
updated = {
    id_: row
    for id_, row in new_data.items()
    if id_ in old_data and old_data[id_] != row
}

我将csv.DictWriter放在这里,让您自己整理其余部分。