根据Python中的其他CSV从CSV中删除行

时间:2018-02-19 02:33:12

标签: python csv text

我有一个名为master.csv的csv文件,其中包含以下列

link, name

另一个名为details.csv的csv文件,其中包含以下列

link, name, price, desc

我希望master.csvdetails.csv匹配,并删除master.csv中已包含details.csv详细信息的行。 link列是与之匹配的唯一列。

目前我可以逐行阅读CSV文件。

filename = "src/master.csv"
filename2 = "src/details.csv"

file = open(filename2)


#loop through details
for line in file:   

    #code to get column link from details.csv using regex
    prog = re.compile('xxxxx') 
    link = prog.match(data)

    remove_from_master(link)

应该如何编写remove_from_master()函数是我遇到的问题。这两个CSV的顺序不同,因此如果迭代master.csv并检查details.csv中每个项目的每一行中的链接,则需要很多时间。

还有其他快速方法吗?

1 个答案:

答案 0 :(得分:1)

如果文件不是很大,您可以选择使用csv模块吗?

import csv

# Open details file and get a unique set of links
details_csv = csv.DictReader(open('src/details.csv','r'))
details = set(i.get('link') for i in details_csv)

# Open master file and only retain the data not in the set
master_csv = csv.DictReader(open('src/master.csv','r'))
master = [i for i in master_csv if i.get('link') not in details]

# Overwrite master file with the new results
with open('src/master.csv','w') as file:
    writer = csv.DictWriter(file, master[0].keys(), lineterminator='\n')
    writer.writeheader()
    writer.writerows(master)