如何使用python处理csv文件

素材准备

csv⽂件其实就是⽂本⽂件,遵循了⼀定的格式,常⻅的csv⽂件⼀般是⽤逗号来隔开列,⽤换⾏符隔开不同的⾏,注意这⾥的符号都是英⽂符号。我们可以直接⽤open函数来打开csv⽂件;

本实验使用csv文件(example.csv)分享:https://osswangting.oss-cn-shanghai.aliyuncs.com/python/example.csv

例如我们用文本编辑器打开csv文件时看到的内容一般为逗号分隔的纯文本文件:

最基本方式打开csv

使用python代码打开一个csv文件基本形式:

代码:

提示报错:

Traceback (most recent call last): File "D:/20220728/file_ops.py", line 2, in for line in f.readlines(): UnicodeDecodeError: 'gbk' codec can't decode byte 0xb7 in position 15: illegal multibyte sequence

以只读方式打开时除了指定模式为"r"之外还有指定在python中以要打开的文件的编码相同的方式打开,也就是让python不以默认的 gbk方式打开,而是以我们指定的 utf-8 打开( encoding='utf-8' )

如果要保存的内容有中文,而且之后需要用Excel打开文件,那么需要选用utf-8-sig编码。如果使用utf-8编码,会导致使用Excel查看文件时中文乱码

代码迭代:

此时python代码成功将csv文件内容读取并输出到控制台

注意:文本内容都是以逗号来区分字段,但如果出现一个字段中有逗号符时,那么则会出现错列的情况,为了避免错列的情况发生,我们则需要在同一字段或同一列内容出现逗号时,用引号引起来规避这样的问题发生。

例如文中的:( 葡萄 ),如果文件中内容是( 葡,萄 ),那么( 葡,萄 )默认会别识别成2列,所以需要修改成( "葡,萄" ),则才可以识别成一列内容。

使用csv模块读取文件

Python库:csv Python中集成了专用于处理csv文件的库,名为:csv。

csv 库中有4个常用的对象:

读取方法1-代码:

csv.reader(f)

reader() 按⾏读取,每⼀⾏是⼀个列表,reader是列表对象

一个元素为:['日期', '订单号', '产品ID', '产品类目', '数量(斤)', '单价', '折扣', '销售额']

所以遍历去获取其中的每一个字段

这种方法有一个缺点是一行一行整行取,不够灵活

读取方法2-代码:

csv.DictReader(f)

字典对象

通过取key键来获取对应的值,key相当于字段名

使用csv模块写入文件

写入方法1-代码:

writerow()一次只能写入一行

如果使用writerows()一次可以写入多行

注意:, newline=""参数加入后,可以让表格数据行之间没有空白行,不加否则每行数据中间都会有一行空白行

写入方法2-代码:

读取csv文件(使用pandas模块)

代码:

csv文件内容去重(使用pandas模块)

本实验使用csv文件(example.csv)分享:https://osswangting.oss-cn-shanghai.aliyuncs.com/python/example.csv

主要使用pandas模块中涉及的drop_duplicates()函数

参数说明
subset根据指定的列名进行去重,默认整个数据集
keep可选{‘first’, ‘last’, False},默认first,即默认保留第一次出现的重复值,并删去其他重复的数据,False是指删去所有重复数据。
inplace是否对数据集本身进行修改,默认False

代码中subset对应的值是列名,表示根据什么列来去重,可以多列去重 默认值为subset=None表示考虑所有列

keep='first'表示保留第一次出现的重复行,是默认值。keep另外两个取值为"last"和False,分别表示保留最后一次出现的重复行和去除所有重复行。

inplace=True表示直接在原来的DataFrame上删除重复项,而默认值False表示生成一个副本

删除csv文件行与列(使用pandas模块)

原文件内容: