Python读写csv文件流程及异常解决

Python读写csv文件流程及异常解决

1. 什么是CSV文件

CSV(Comma-Separated Values)文本格式是一种用来存储表格数据的文件格式,其中每条记录为一行,每列之间用逗号隔开。

例如:

Name, Age, City

John, 25, New York

Lucy, 30, San Francisco

Tom, 35, Chicago

这个CSV文件存储了三个人的信息,包括姓名、年龄和城市。每行记录都用逗号隔开,第一行为表头。

2. 使用Python读取CSV文件

2.1 CSV模块简介

Python中的csv模块提供了一些操作CSV文件的方法,包括读写、解析等。使用csv模块可以方便地读取CSV文件中的数据。

2.2 读取CSV文件

使用csv模块读取CSV文件需要以下步骤:

导入csv模块

使用open()函数打开CSV文件

创建csv.reader对象

使用for循环遍历每一行记录

下面是一个例子:

import csv

with open('data.csv', 'r') as f:

reader = csv.reader(f)

for row in reader:

print(row)

上述代码中,'data.csv'是CSV文件的路径。使用open()函数打开文件后,创建了一个csv.reader对象。然后使用for循环遍历每一行记录,使用print()函数输出每一行。

2.3 写入CSV文件

使用csv模块写入CSV文件需要以下步骤:

导入csv模块

使用open()函数打开CSV文件

创建csv.writer对象

使用writerow()方法写入一行记录

下面是一个例子:

import csv

with open('data.csv', 'w') as f:

writer = csv.writer(f)

writer.writerow(['Name', 'Age', 'City'])

writer.writerow(['John', '25', 'New York'])

writer.writerow(['Lucy', '30', 'San Francisco'])

writer.writerow(['Tom', '35', 'Chicago'])

上述代码中,'data.csv'是CSV文件的路径。使用open()函数打开文件后,创建了一个csv.writer对象。然后使用writerow()方法逐行写入记录。需要注意的是,在写入之前需要写入表头。

3. CSV文件的异常解决

3.1 文件不存在

如果指定的CSV文件不存在,会引发FileNotFoundError异常。

例如:

import csv

with open('not_exist.csv', 'r') as f:

reader = csv.reader(f)

for row in reader:

print(row)

输出:

FileNotFoundError: [Errno 2] No such file or directory: 'not_exist.csv'

解决方法:需要检查文件路径是否正确,或者可以使用try-except语句捕获异常,进行相应的处理。

3.2 文件编码

CSV文件中的文本可能包含特殊字符,如果不指定文件的编码方式会引发UnicodeDecodeError异常:

例如:

import csv

with open('data.csv', 'r') as f:

reader = csv.reader(f)

for row in reader:

print(row)

输出:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb9 in position 0: invalid start byte

解决方法:可以指定文件的编码方式,例如:

import csv

with open('data.csv', 'r', encoding='gbk') as f:

reader = csv.reader(f)

for row in reader:

print(row)

上述代码中,使用encoding='gbk'指定了文件的编码方式为GB18030,这样就可以顺利地读取CSV文件中的文本数据。

3.3 CSV文件格式错误

如果CSV文件格式错误,例如某一行的记录数与表头记录数不一致,会引发ValueError异常。

例如:

import csv

with open('data.csv', 'r', encoding='gbk') as f:

reader = csv.reader(f)

for row in reader:

print(row)

假设data.csv文件内容如下:

Name, Age, City

John, 25, New York

Lucy, 30

Tom, 35, Chicago

输出:

ValueError: not enough values to unpack (expected 3, got 2)

解决方法:可以使用try-except语句捕获异常,进行相应的处理,例如跳过该行记录或者抛弃该行记录重新读取。

3.4 CSV文件内容含有非法字符

CSV文件中的数据可能含有非法字符,例如逗号、引号等,会导致CSV解析出错。

例如:

import csv

with open('data.csv', 'r', encoding='gbk') as f:

reader = csv.reader(f)

for row in reader:

print(row)

假设data.csv文件内容如下:

Name, Age, City

John, 25, "New, York"

Lucy, 30, San Francisco

Tom, 35, Chicago

输出:

_csv.Error: field larger than field limit (131072)

解决方法:可以使用csv模块的辅助函数,例如csv.reader()方法的quoting参数和csv.writer()方法的quoting参数,可以设置CSV字符串的引用符号,避免特殊字符的错误解析。

3.5 使用pandas读取CSV文件

除了使用csv模块之外,还可以使用pandas模块中的read_csv()方法读取CSV文件。pandas是Python中一个强大的数据分析库,可以方便地进行数据处理、分析和可视化。

import pandas as pd

df = pd.read_csv('data.csv')

print(df)

上述代码中,'data.csv'是CSV文件的路径。使用pandas模块的read_csv()方法读取CSV文件,返回一个pandas.DataFrame对象,可以方便地进行数据处理。

总结

通过本文的介绍,我们了解了Python中读写CSV文件的方法,以及遇到的一些异常情况的处理方法。csv模块提供了方便的CSV文件读写操作,pandas模块则提供了更为强大的数据处理能力。在使用CSV文件时需要注意文件路径、文件编码和特殊字符的处理。

后端开发标签