Python 删除 CSV 文件中符合条件的特定行

CSV(Comma Separated Values)是一种常见的文件格式,用于以纯文本形式存储表格数据。在数据处理和分析中,我们经常需要对 CSV 文件进行操作,包括读取、修改和删除特定行等操作。

本文将介绍如何使用 Python 删除 CSV 文件中符合条件的特定行,并提供相应的代码示例。

CSV 文件的读取和写入

在操作 CSV 文件之前,我们首先需要读取文件并将其转换成可以操作的格式。Python 提供了 csv 模块来帮助我们处理 CSV 文件。

import csv

def read_csv(file_name):
    with open(file_name, 'r', newline='', encoding='utf-8') as file:
        reader = csv.reader(file)
        data = list(reader)
    return data

def write_csv(file_name, data):
    with open(file_name, 'w', newline='', encoding='utf-8') as file:
        writer = csv.writer(file)
        writer.writerows(data)

上述代码中,read_csv 函数可以用于读取 CSV 文件,返回一个二维列表,其中每个子列表表示一行数据;write_csv 函数可以用于将数据写入 CSV 文件。

删除符合条件的特定行

在删除符合条件的特定行之前,我们需要了解如何判断一行是否符合特定条件。假设 CSV 文件的第一列为学生姓名,我们要删除所有姓张的学生记录,可以使用以下代码判断条件:

def is_zhang(row):
    return row[0].startswith('张')

上述代码中,is_zhang 函数接受一行数据作为参数,并判断该行数据的第一个元素是否以“张”开头。如果是,则返回 True,否则返回 False

接下来,我们可以使用以下代码删除符合条件的特定行:

def delete_rows(file_name, condition):
    data = read_csv(file_name)
    new_data = [row for row in data if not condition(row)]
    write_csv(file_name, new_data)

上述代码中,delete_rows 函数接受一个文件名和一个条件函数作为参数。它首先读取 CSV 文件的数据,然后使用列表推导式生成一个新的数据列表 new_data,其中不符合条件的行被过滤掉。最后,将新的数据列表写入原文件中,实现删除符合条件的特定行的目的。

示例与实践

为了更好地理解代码的运行过程,我们假设有一个名为 students.csv 的 CSV 文件,其中包含了学生的姓名和年龄信息。现在,我们需要删除所有年龄小于 18 岁的学生记录。

gantt
    dateFormat  YYYY-MM-DD
    title 删除 CSV 文件中符合条件的特定行

    section 读取文件
    读取文件数据        :done, 2022-01-01, 1d

    section 删除符合条件的行
    判断条件            :done, 2022-01-02, 1d
    删除符合条件的行    :done, 2022-01-03, 1d

    section 写入文件
    写入新数据          :done, 2022-01-04, 1d

我们可以根据上述代码示例,实现删除符合条件的特定行的操作:

def is_underage(row):
    age = int(row[1])
    return age < 18

delete_rows('students.csv', is_underage)

上述代码中,is_underage 函数判断学生的年龄是否小于 18 岁。然后,调用 delete_rows 函数删除所有年龄小于 18 岁的学生记录。

总结

通过使用 Python 的 csv 模块,我们可以方便地读取和写入 CSV 文件。结合条件判断和列表推导式,我们可以轻松地删除 CSV 文件中符合特定条件的特定行。

希望本文对你理解如何删除 CSV 文件中符合条件的特定行有所帮助。你可以根据自己的实际需求,修改和扩展上述代码,实现更复杂的数据处理操作。