csv文件读写笔记

**

csv文件的读入

**

1. csv.reader()函数
reader()函数会返回一个reader对象,这是一个可迭代对象,该对象里面的每一个元素都是一个列表,每一个列表都对应了csv文件中的一行。

import csv

#读入文件
path1 = './员工发展基金确认表.csv'
with open(path1,'r',encoding='utf-8',newline='') as f1:
    csv_reader = csv.reader(f1)
    print(type(csv_reader))
    #<class '_csv.reader'>
    print(csv_reader)
    #<_csv.reader object at 0x0000021CD276FA70>
    #csv_reader 是一个对象
    for i in csv_reader:
        print(i)
    #读取的结果包括表头
    #['\ufeff姓名', '工号', '员工发展基金', '员工签字']
    #['邱大仁', '1001', '300', '']


  1. csv.DictReader()类
    如果在==csv文件中存在映射关系(即csv文件的第一行为表格中的表头)==使用csv.DictReader()类

实例化DictReader类后,会得到一个DictReader对象,这是一个可迭代对象,我们可以使用循环来遍历它的每一个元素。但不同于reader()的是,该对象里面的每一个元素都是一个字典,每一个字典的值都可以对应csv文件中的一行键对应csv文件的表头
这个类还有个属性fieldnames,该属性可以将csv文件(表格)的表头(第一行)读取出来,返回值是列表。这个表头也就是字典的键(key)。

import csv

#读入文件
path1 = './员工发展基金确认表.csv'
with open(path1,'r',encoding='utf-8',newline='') as f1:
    csv_reader = csv.DictReader(f1)
    print(type(csv_reader))
    #<class 'csv.DictReader'>
    print(csv_reader)
    #<csv.DictReader object at 0x0000021CD28075F8>
    title = csv_reader.fieldnames
    print(title)
    #['\ufeff姓名', '工号', '员工发展基金', '员工签字']
    for i in csv_reader:
        print(i)      
        print(type(i))
        #<class 'collections.OrderedDict'>
        

print(i) 的结果为:
【注意】
i 不包括表头那一行
OrderedDict([(’\ufeff姓名’, ‘邱大仁’), (‘工号’, ‘1001’), (‘员工发展基金’, ‘300’), (‘员工签字’, ‘’)])
OrderedDict([(’\ufeff姓名’, ‘徐小刚’), (‘工号’, ‘1005’), (‘员工发展基金’, ‘100’), (‘员工签字’, ‘’)])
等等

csv 文件的写入

1. csv.writer()
writer()函数会返回一个writer对象,可以调用该对象的方法将字符串文本写入csv文件。
(1)csv_writer.writerow()
参数row代表了你想要写入csv文件的内容,它必须是一个可迭代对象,这里推荐使用列表
另外,如果你想通过这个方法写入多行数据。需要借助循环来实现。

import csv
member_list = [['邱大仁'], ['徐小刚', '陈知枫'], ['王晴', '廖雨']]
#第一种方法:writerow()+for循环
with open('writerow.csv','w',encoding='gbk',newline='') as f1:
    
    csv_writer = csv.writer(f1)
    for i in member_list:
        csv_writer.writerow(i)

在这里插入图片描述

(2)csv_writer.writerows()

参数rows也是可迭代对象,可以理解为由多个row组成。
这个方法让我们可以在没有for循环的情况下达到上面题目所要求的效果

import csv
member_list = [['邱大仁'], ['徐小刚', '陈知枫'], ['王晴', '廖雨']]
#第一种方法:writerow()+for循环
with open('writerows.csv','w',encoding='gbk',newline='') as f1:
    csv_writer = csv.writer(f1)
    csv_writer.writerows(member_list)

在这里插入图片描述

2. csv.DictWriter()

DictWriter的操作类似于常规的writer(),但DictWriter会将字典写入(映射)到csv文件的行中。
通过DictWriter写入的行,都必须是字典形式
,这点和writer()还是有区别的。
所以,当我们需要将字典类型的数据写入csv文件时,使用DictWriter会是一种更好的选择。
有一点需要你特别注意,与DictReader不同,在上面的图片中,我特意标注出了一个参数fieldnames
实例化DictWriter时,必须要传入该参数
我们需要将一个列表传给参数fieldnames,它的作用是设置csv文件的第一行数据(即表头数据)。当我们要将字典通过DictWriter对象写入csv文件时,通常会把字典的键(key)存入一个列表,再把这个列表传给参数fieldnames。

实例化DictWriter后,会得到一个DictWriter对象,我们需要通过该对象来调用两个方法来写入内容。
第一个方法:writeheader(),该方法可将表头(即字典中的键(key))写入csv的第一行。
也就是说,如果要写入表头,不仅要在DictWriter中传入参数fieldnames,还需要调用writeheader()方法。这点很重要,一定要记住。
第二个方法:writerow(row) ,与writer对象调用writerow(row)不同的是,这里的参数row必须是字典形式的数据。

for i in csv_reader:
        #print(i)      
        #print(type(i))
        #<class 'collections.OrderedDict'>
        #提取员工姓名,用以命名每一个独立的csv文件
        name = i['\ufeff姓名'] +'.csv'
        #print(name)
        file_path = path2 + name
        print(file_path)
        with open(file_path,'w',encoding='utf-8',newline='') as f2:        
            csv_writer = csv.DictWriter(f2,fieldnames=headers)
            **csv_writer.writeheader()**
            csv_writer.writerow(i)
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值