我每天都在更新CSV文件。需要根据条件处理和创建新文件-如果将新数据针对该行标记为“新建”,并且如果将其更新为现有数据,则应标记为“更新”。如何根据日期按照以下方式编写Python代码以处理和输出CSV文件。
empid,enmname,sal,datekey
1,cholan,100,8/14/2018
2,ram,200,8/14/2018
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
答案 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
放在这里,让您自己整理其余部分。