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文件时需要注意文件路径、文件编码和特殊字符的处理。