9.6 Python CSV文件的读取与写入(上)

9.6 Python CSV文件的读取与写入

今天学什么

【CSV文件的读取操作】
reader():以列表的形式获取 csv 文件信息
csv.DictReader() :以字典的形式获取 csv 文件信息

【CSV文件的写入操作】
writer:写入列表
writer对象.writerow(list) 方法:写入单行
writer对象.writerows(嵌套列表) 方法:写入多行

DictWriter类:写入字典
csv.DictWriter(f, fieldnames=head)类:实例化 DictWriter 对象,便于后续写入字典数据
DictWriter对象.writeheader() 方法:写入表头
DictWriter对象.writerow(字典) 方法:写入单行
DictWriter对象.writerows(列表嵌套字典) 方法:写入多行

9.6.1 writer 写入列表

任务1
新建【工作】文件夹,在【工作】文件夹里新建【各班级成绩】文件夹。

# 导入模块:import 模块名
import os 

# 调用函数:模块名.函数名()
# makedirs创建多级目录
os.makedirs('工作/各班级成绩')

在这里插入图片描述

代码运行后,文件新建成功。

任务2
在【各班级成绩】中新建【1班成绩单.csv】并写入内容

import csv 
# 声明文件路径
file = '工作\\各班级成绩\\1班成绩单.csv'

# 用列表存储要写入的信息
list1 = ['姓名','成绩']
list2 = ['张三','30']
list3 = ['李四','40']
list4 = ['王五','50']

# 以从头写入的方式用open函数打开文件
# 将返回的文件对象赋值给变量f
with open (file ,'w' ,encoding='utf-8') as f :
    csv_target = csv.writer(f)
    
    # writerows一次性写入多行
    csv_target.writerows([list1, list2, list3, list4])

代码运行后,新建了一个CSV文件,并成功写入列表信息。

在这里插入图片描述

观察上图,数据之间都有一空行,这是因此CSV文件写入时默认有空行。
如果不想要空行,在open函数中增加第4个参数newline=''

import csv 

# 声明文件路径
file = '工作\\各班级成绩\\1班成绩单.csv'

# 用列表存储要写入的信息
list1 = ['姓名','成绩']
list2 = ['张三','30']
list3 = ['李四','40']
list4 = ['王五','50']

# newline=''表示不需要空行
with open (file ,'w' ,encoding='utf-8',newline='') as f :
    csv_target = csv.writer(f)
    
    # writerows一次性写入多行
    csv_target.writerows([list1, list2, list3, list4])

代码运行后,打开CSV文件,效果如下:

在这里插入图片描述

with open (file ,'w' ,encoding='utf-8',newline='') as f :
    csv_target = csv.writer(f)
    print(csv_target)
    print(type(csv_target))
    
    # writerows一次性写入多行
    csv_target.writerows([list1, list2, list3, list4])
    print(type(csv_target))

【终端输出】

<_csv.writer object at 0x000001FC2E2C9590>
<class '_csv.writer'>
<class '_csv.writer'>

csv_target是一个要写入的对象,对象类型为<class ‘_csv.writer’>。
当我们用writer 写入信息时,csv_target是一个要写入的对象,对象类型为<class ‘_csv.writer’>。

9.6.2 reader():以列表的形式获取csv文件信息

任务3
输出【1班成绩单.csv】中的内容

import csv 

# 声明文件路径
file = '工作\\各班级成绩\\1班成绩单.csv'

# 以只读模式用open函数打开文件
# 将返回的文件对象赋值给变量f
with open (file, 'r',encoding='utf-8') as f :
    csv_target = csv.reader(f)    
    for row  in csv_target :
        print(row)

【终端输出】

['姓名', '成绩']
['张三', '30']
['李四', '40']
['王五', '50']

运行代码后,以列表的形式输出了CSV文件中的内容。

with open (file, 'r',encoding='utf-8') as f :
    csv_target = csv.reader(f)
    print(csv_target)
    print(type(csv_target))
    for row  in csv_target :
        row
    print(type(row))
<_csv.reader object at 0x000001FC2E2CEF40>
<class '_csv.reader'>
<class 'list'>

当我们用reader 读取文件信息时,csv_target是一个要读取的对象,对象类型为<class ‘_csv.reader’>
遍历_csv.reader对象得的数据类型是列表,即<class ‘list’>。

9.6.3 csv.DictReader()类 :以字典的形式获取 csv 文件信息

import csv 

# 声明文件路径
file = '工作\\各班级成绩\\1班成绩单.csv'

# 以只读模式用open函数打开文件
# 将返回的文件对象赋值给变量f
with open (file, 'r',encoding='utf-8') as f :
    csv_target = csv.DictReader(f)
    for row  in csv_target :
        print(row)

【终端输出】

{'姓名': '张三', '成绩': '30'}
{'姓名': '李四', '成绩': '40'}
{'姓名': '王五', '成绩': '50'}
with open (file, 'r',encoding='utf-8') as f :
    csv_target = csv.DictReader(f)
    print(csv_target)
    print(type(csv_target))
    for row  in csv_target :
        row
    print(type(row))

【终端输出】

<csv.DictReader object at 0x000001FC2E29B5E0>
<class 'csv.DictReader'>
<class 'dict'>

当我们用DictReader类 读取文件信息时,csv_target是一个要DictReader对象,对象类型为<class ‘csv.DictReader’>。
遍历_csv.reader对象得的数据类型是字典,<class ‘dict’>。

csv.writer 和csv.DictReader的区别

在这里插入图片描述

【代码解析】
因为任务只是读取信息,不需要写入,只因此open函数的第二参数mode=r,r 是只读模式。

我们首先使用 open() 函数打开csv文件,open函数会返回一个文件对象。
这里我们将返回的文件对象赋给了变量 f。
随后将文件对象 f 作为参数传给 DictReader()类。
然后调实例化DictReader()类对象= csv.DictReader(f),得到一个DictReader对象,类型为<class 'csv.DictReader'>

然后我们使用 for 循环来遍历它的每一个元素。
可以看到,终端输出几个字典。

因为 DictReader() 类以字典的形式读取 csv 文件。
所以,for 循环每次遍历后,我们可以得到一个字典。
其中,字典的键表示文件里的表头,字典的值表示文件每一行的单元格数据。如下图所示:

在这里插入图片描述

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值