比较两个具有标题的不同CSV文件,并将差异导出到具有日期的新CSV



所以我有两个CSV文件;一个大数据文件和一个包含所有国庆节的文件。因此,标头并不相同(因为NH文件只有一列(。我想做的是根据这些国家假日过滤大数据文件,如果匹配(这将作为年度数据发生(,则该行将不会导出到新的CSV文件。我已经尝试了很多东西,但没有什么能给我想要的结果。两个文件都有相同的日期表示法YYYY-MM-DD

import csv
f1 = open('file1.csv')
oldFile1 = csv.reader(f1)
oldList1 = []
for row in oldFile1:
oldList1.append(row)
f2 = open('file2.csv')
oldFile2 = csv.reader(f2)
oldList2 = []
for row in oldFile2:
oldList2.append(row)
f1.close()
f2.close()
keyfield = 1 # Change this for choosing the column number
oldList2keys = [row['Date'] for row in oldList2]
print ([row for row in oldList1 if row['Date'] not in oldList2keys])

所以我现在有:

file1.csv

A,B,C,D
11,7,12231,2014-06-07
23,11,12243,2014-06-08
35,15,12256,2014-06-09
47,19,12270,2014-06-10
59,23,12282,2014-06-11
71,27,12295,2014-06-12
83,31,12309,2014-06-13
95,35,12321,2014-06-14
107,39,12334,2014-06-15
119,43,12348,2014-06-16
131,47,12360,2014-06-17
143,51,12373,2014-06-18
155,55,12387,2014-06-19
167,59,12399,2014-06-20
179,63,12412,2014-06-21
191,67,12426,2014-06-22
203,71,12438,2014-06-23
215,75,12451,2014-06-24
227,79,12465,2014-06-25
239,83,12477,2014-06-26

file2.csv

Holidays
2010-05-23
2011-06-12
2012-05-27
2013-05-19
2014-06-08
2015-05-24
2016-05-15
2017-06-04
2018-05-20
2019-06-09
2020-05-31
2021-05-23
2022-06-05
2023-05-28
2024-05-19
2049-06-06
2050-05-29
2011-05-24
2011-06-13
2012-05-28

我希望在创建的CSV文件中删除第二个CSV文件中匹配的行(在本例中为2014-06-08(。

这里有一个可能的解决方案:

import csv
with open('file2.csv') as f:
reader = csv.reader(f)
holidays = [_[0] for _ in reader]
# Skip the header line
holidays = holidays[1:]
with open('file1.csv') as f, open('output.csv', 'w') as g:
reader = csv.reader(f)
writer = csv.writer(g)
for row in reader:
# Check if the date is in the holidays list
if row[3] not in holidays:
writer.writerow(row)

使用提供的示例数据,上面的代码将生成具有以下内容的output.csv文件:

A,B,C,D
11,7,12231,2014-06-07
35,15,12256,2014-06-09
47,19,12270,2014-06-10
59,23,12282,2014-06-11
71,27,12295,2014-06-12
83,31,12309,2014-06-13
95,35,12321,2014-06-14
107,39,12334,2014-06-15
119,43,12348,2014-06-16
131,47,12360,2014-06-17
143,51,12373,2014-06-18
155,55,12387,2014-06-19
167,59,12399,2014-06-20
179,63,12412,2014-06-21
191,67,12426,2014-06-22
203,71,12438,2014-06-23
215,75,12451,2014-06-24
227,79,12465,2014-06-25
239,83,12477,2014-06-26

最新更新