当前位置:   article > 正文

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

python csv writerows

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('工作/各班级成绩')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

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

任务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])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

代码运行后,新建了一个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])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

代码运行后,打开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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

【终端输出】

<_csv.writer object at 0x000001FC2E2C9590>
<class '_csv.writer'>
<class '_csv.writer'>
  • 1
  • 2
  • 3

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

【终端输出】

['姓名', '成绩']
['张三', '30']
['李四', '40']
['王五', '50']
  • 1
  • 2
  • 3
  • 4

运行代码后,以列表的形式输出了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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
<_csv.reader object at 0x000001FC2E2CEF40>
<class '_csv.reader'>
<class 'list'>
  • 1
  • 2
  • 3

当我们用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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

【终端输出】

{'姓名': '张三', '成绩': '30'}
{'姓名': '李四', '成绩': '40'}
{'姓名': '王五', '成绩': '50'}
  • 1
  • 2
  • 3
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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

【终端输出】

<csv.DictReader object at 0x000001FC2E29B5E0>
<class 'csv.DictReader'>
<class 'dict'>
  • 1
  • 2
  • 3

当我们用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 循环每次遍历后,我们可以得到一个字典。
其中,字典的键表示文件里的表头,字典的值表示文件每一行的单元格数据。如下图所示:

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/212629
推荐阅读
相关标签
  

闽ICP备14008679号