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)