Skip to main content
 首页 » 编程设计

python之如何根据匹配数据从 csv 中删除行

2025年05月04日20cmt

我有大量 csv 格式的数据列表,我需要根据匹配的两个参数从中删除行。

我要删除的数据列表如下所示:

London,James Smith 
London,John Oliver 
London,John-Smith-Harrison 
Paris,Hermione 
Paris,Trevor Wilson 
New York City,Charlie Chaplin 
New York City,Ned Stark 
New York City,Thoma' Becket 
New York City,Ryan-Dover 

然后主 csv 将根据城市名称与第二列的匹配以及该名称与第 9 列中的名称的匹配来删除一行。

如果两者都匹配,则删除主 csv 中的行(请注意,此处未提供此 csv 示例)。

请您参考如下方法:

我根据您提供/描述的数据类型验证了以下内容:

import csv 
from cStringIO import StringIO 
 
# parse the data you're about to filter with 
with open('filters.csv', 'rb') as f: 
    filters = {(row[0], row[1]) for row in csv.reader(f, delimiter=',')} 
 
out_f = StringIO()  # use e.g. `with open('out.csv', 'wb') as out_f` for real file output 
out = csv.writer(out_f, delimiter=',') 
 
# go thru your rows and see if the pair (row[1], row[8]) is 
# found in the previously parsed set of filters; if yes, skip the row 
with open('data.csv', 'rb') as f: 
    for row in csv.reader(f, delimiter=','): 
        if (row[1], row[8]) not in filters: 
            out.writerow(row) 
 
# for debugging only 
print out_f.getvalue()  # prints the resulting filtered CSV data 

注意 {... for ... in ...} 是集合理解语法;根据您的 Python 版本,您可能需要将其更改为等效的 set(... for ... in ...) 才能正常工作。