056. 编写一个函数,实现简单的CSV文件解析器

以下是一个简单的Python函数,用于解析CSV文件。这个函数可以读取CSV文件的内容,并将其转换为一个列表,其中每一行是一个字典,字典的键是列标题,值是对应的单元格内容。

示例代码

import csv

def parse_csv(file_path):
    """
    解析CSV文件
    :param file_path: CSV文件的路径
    :return: 包含每行数据的列表,每行是一个字典
    """
    try:
        with open(file_path, mode='r', newline='', encoding='utf-8') as file:
            # 使用csv.DictReader读取CSV文件
            reader = csv.DictReader(file)
            data = [row for row in reader]  # 将每行转换为字典并存储在列表中
            return data
    except FileNotFoundError:
        print(f"错误:文件 {file_path} 未找到!")
        return None
    except Exception as e:
        print(f"发生错误:{e}")
        return None

# 示例用法
if __name__ == "__main__":
    file_path = "example.csv"  # 替换为你的CSV文件路径
    csv_data = parse_csv(file_path)
    if csv_data:
        for row in csv_data:
            print(row)

示例CSV文件内容

假设有一个名为example.csv的文件,内容如下:

id,name,age
1,Alice,25
2,Bob,30
3,Charlie,35

示例运行

运行代码后,输出将为:

{'id': '1', 'name': 'Alice', 'age': '25'}
{'id': '2', 'name': 'Bob', 'age': '30'}
{'id': '3', 'name': 'Charlie', 'age': '35'}

代码说明

csv.DictReader

  • csv.DictReader是一个非常方便的工具,它会自动将CSV文件的每一行解析为一个字典,其中键是列标题,值是对应的单元格内容。

  • 这使得数据的访问更加直观和方便。

文件读取

  • 使用open函数以只读模式打开文件,指定newline=''以避免在读取时出现多余的换行符。

  • 使用encoding='utf-8'确保支持多种字符集(如中文等)。

异常处理

  • 使用try-except块捕获可能的错误,例如文件不存在(FileNotFoundError)或其他异常。

  • 如果发生错误,打印错误信息并返回None

扩展功能

如果你需要更复杂的CSV解析功能,比如处理带引号的字段、自定义分隔符等,可以进一步扩展这个函数。以下是一个支持自定义分隔符的版本:

import csv

def parse_csv(file_path, delimiter=',', quotechar='"'):
    """
    解析CSV文件
    :param file_path: CSV文件的路径
    :param delimiter: 字段分隔符,默认为逗号
    :param quotechar: 引号字符,默认为双引号
    :return: 包含每行数据的列表,每行是一个字典
    """
    try:
        with open(file_path, mode='r', newline='', encoding='utf-8') as file:
            # 使用csv.DictReader读取CSV文件
            reader = csv.DictReader(file, delimiter=delimiter, quotechar=quotechar)
            data = [row for row in reader]  # 将每行转换为字典并存储在列表中
            return data
    except FileNotFoundError:
        print(f"错误:文件 {file_path} 未找到!")
        return None
    except Exception as e:
        print(f"发生错误:{e}")
        return None

# 示例用法
if __name__ == "__main__":
    file_path = "example.csv"  # 替换为你的CSV文件路径
    csv_data = parse_csv(file_path, delimiter=',', quotechar='"')
    if csv_data:
        for row in csv_data:
            print(row)

支持自定义分隔符的示例

假设有一个使用分号分隔的CSV文件example_semicolon.csv,内容如下:

id;name;age
1;Alice;25
2;Bob;30
3;Charlie;35

运行代码时,可以指定分隔符为分号:

csv_data = parse_csv("example_semicolon.csv", delimiter=';')

输出将为:

{'id': '1', 'name': 'Alice', 'age': '25'}
{'id': '2', 'name': 'Bob', 'age': '30'}
{'id': '3', 'name': 'Charlie', 'age': '35'}

注意事项

文件编码:如果CSV文件的编码不是utf-8,可能会导致读取错误。如果文件使用其他编码(如gbk),可以在open函数中指定正确的编码,例如:

with open(file_path, mode='r', newline='', encoding='gbk') as file:

字段分隔符:默认情况下,CSV文件使用逗号(,)作为字段分隔符。如果文件使用其他分隔符(如分号或制表符\t),可以通过delimiter参数指定。

引号字符:默认情况下,CSV文件使用双引号(")作为引号字符。如果文件使用其他引号字符(如单引号'),可以通过quotechar参数指定。

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)