【发布时间】:2023-03-15 14:05:02
【问题描述】:
作为使用 Python 的初学者,我又被困住了!我有两个 CSV 文件如下:
CSV1(主列表)
ID Name Code. Prop
12 SAB 1234 ZXC
12 SAB 1236 ZXC
12 SAB 1233 ZXC
12 SAB 1234 ZXC
11 ASN 1234 ABV
16 HGF 1233 AAA
19 MAB 8765 BCT
19 MAB 8754 BCT
CSV2(子集)
ID Name Code. Prop
12 SAB 1234 ZXC
12 SAB 1236 ZXC
12 SAB 1233 ZXC
12 SAB 1234 ZXC
19 MAB 8765 BCT
19 MAB 8754 BCT
我的目标是尝试使用 CSV 第一列中的值来比较和识别那些在 CSV2 中没有出现的值。
编辑 因此,在上述示例中,CSV1(主列表)中 ID 为 11 和 16 的行应该被导出。
需要考虑的事情。 ID 虽然唯一,但在两个 CSV 文件中都有多个实例(如上面 csv 文件中的示例数据所示)。
我已经浏览了这个网站上的几个线程,例如this one。我想要实现的目标与此处所要求的完全相反,但我无法理解该线程上的解决方案。
我试图得到一些结果,但无济于事。我在下面附上了我正在使用的代码:
import csv
fOpen1=open('C:\Master.csv')
fOpen2=open('C:\Subset.csv')
fOutput1=open('C:\Untagged.csv', 'wb')
master=csv.reader(fOpen1)
subset=csv.reader(fOpen2)
untagged=csv.writer(fOutput1)
count=0
subsetCopy=list()
header1=master.next()
header2=subset.next()
untagged.writerow(header1)
for row2 in subset:
subsetCopy.append(row2)
for row1 in master:
for row2 in subsetCopy:
if row1[0] != row2[0]:
count=count+1
untagged.writerow(row1)
print count
当我运行它时,我得到了数百万(计数)的非常荒谬的结果。奇怪的是,我在没有 != 的情况下使用了完全相同的代码(使用 == 代替)来实现另一个目标,它就像一个魅力。我认为改变平等条件应该会给我相反的结果。相反,它最终会生成一个没有任何用处的巨大 csv 文件。 我也尝试使用字典,但后来意识到由于两个文件中的记录重复,它可能无法正常工作。在这两个文件中获取特定行的所有实例对我来说很重要。
我哪里错了?欢迎任何意见/建议。
【问题讨论】:
-
pandas 库对于这类事情非常有用。如果我正确理解您的问题,程序应该输出 ID 为 11 和 16 的行?