我有一个名为master.csv
的csv文件,其中包含以下列
link, name
另一个名为details.csv
的csv文件,其中包含以下列
link, name, price, desc
我希望master.csv
与details.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
中每个项目的每一行中的链接,则需要很多时间。
还有其他快速方法吗?
答案 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)