Python 如何比较csv文件和有更改的两个文件的输出行?

Python 如何比较csv文件和有更改的两个文件的输出行?,python,csv,comparison,Python,Csv,Comparison,我对python非常陌生,我正在尝试比较2个csv文件,它们的信息基本相同,但有些行被完全删除、新建,或者只更改了1个值。我需要一个输出文件,有完整的行从以前和当前的csv文件一个在另一个上,只有当有一个变化。我还需要在最前面添加一列,并根据它们来自哪个文件(以前的或当前的)标记行 我曾尝试使用difflib中的HtmlDiff,但这并没有以我想要的格式提供信息,它还显示了所有未更改的信息。我还尝试了csv.reader和diff_行,但那是一场灾难 最接近我的结果是下面的,但在它输出的组合文件

我对python非常陌生,我正在尝试比较2个csv文件,它们的信息基本相同,但有些行被完全删除、新建,或者只更改了1个值。我需要一个输出文件,有完整的行从以前和当前的csv文件一个在另一个上,只有当有一个变化。我还需要在最前面添加一列,并根据它们来自哪个文件(以前的或当前的)标记行

我曾尝试使用difflib中的HtmlDiff,但这并没有以我想要的格式提供信息,它还显示了所有未更改的信息。我还尝试了csv.reader和diff_行,但那是一场灾难

最接近我的结果是下面的,但在它输出的组合文件中,我无法知道哪一行来自哪个文件,因为它没有标签。尽量不要嘲笑我的代码;我相信有更好的方法可以做到这一点,但我自己无法解决,我真的非常感谢你的帮助

如果第二次未定义“上一次”和“当前”,则删除输出为空

previous=open('2019-08-21.csv','r',encoding=“utf8”)
当前=打开('2019-08-27.csv','r',encoding=“utf8”)
添加=设置(当前)-设置(以前)
打开('Additions Aug 2019.csv','w',encoding=“utf8”)作为文件\u out:
对于添加的行:
文件输出。写入(行)
previous=打开('2019-08-21.csv','r',encoding=“utf8”)
当前=打开('2019-08-27.csv','r',encoding=“utf8”)
移除=设置(上一个)-设置(当前)
打开('Removals Aug 2019.csv','w',encoding=“utf8”)作为文件输出:
对于删除中的行:
文件输出。写入(行)
文件名=['Additions Aug 2019.csv','removes Aug 2019.csv']
以open('Add,Rem Aug 2019.csv','w',encoding=“utf8”)作为输出文件:
对于文件名中的fname:
将open(fname)作为内嵌:
对于填充中的线:
输出文件。写入(行)
上一个。关闭()
当前关闭()
文件_out.close()

我设法找到了熊猫的解决方案,并将为可能需要的任何人分享

将熊猫作为pd导入
previous=打开('2019-08-21.csv','r',encoding=“utf8”)
当前=打开('2019-08-27.csv','r',encoding=“utf8”)
df_p=pd.read_csv(上一个)
df_p.drop(['中间名','出生日期','出生地'],轴=1,原地=True)
df_p.插入(0,‘更改类型’,“删除”)
df_c=pd.read_csv(当前)
df_c.drop(['中间名','出生日期','出生地'],axis=1,inplace=True)
df_c.插入(0,‘更改类型’,“添加”)
df_f=df_c.追加(df_p)
df_dedup=df_f.删除重复项(子集=[‘全名’、‘国家’、‘位置’],保留=False)
打开('Aug 2019 Changes.csv','w',encoding='utf8')作为文件输出:
df_dedup.to_csv(文件_out,索引=False)

为什么Python与diff/csdiff/winmerge/许多其他常用工具相比?我看了一些工具,但它们似乎不能提供我所需的格式的输出,而且我正在尝试学习Python以实现数据自动化,所以这是我渴望获得的技能。