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

标签 python python-2.7 csv match

我有大量 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 ...) 才能正常工作。

关于python - 如何根据匹配数据从 csv 中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19061549/

相关文章:

python - 正则表达式 match() 无法捕获 python 中的简单模式

python - 如何在 Python 2.7.x 中导入最新版本的打印功能?

python-2.7 - 保存交互式 Bokeh 图

Python MySQL Update 需要 10-12 秒更新约 1000 条记录

r - 尝试在 R 中合并多个 csv 文件

java - 如何使用 json.JSONArray 将多维 Json 数组解析为 CSV

java - 将逗号分隔的键=值对转换为 Java 对象

python - 数据类与 typing.NamedTuple 主要用例

python - 基于空间维度去除图像噪声

python - 更改 model.py 中的类名后,无需在 Django 中应用任何迁移