Python自动化办公_读写CSV文件

1、代码实现

import csv

# 设置员工发展基金确认表路径
source_path = './员工发展基金确认表.csv'
# 设置存放拆分结果文件的文件夹路径
result_path = './员工发展基金文件夹_demo/'

# 打开员工发展基金确认表
with open(source_path, 'r', encoding='utf-8', newline='') as source_file:
    # 将文件对象转换为DictReader对象
    source_csv = csv.DictReader(source_file)
    # 将csv对象的表头读取出来
    headers = source_csv.fieldnames

    # 循环处理确认表中除表头外的每一行数据
    for csv_row in source_csv:
        # 根据获取的员工名字拼接新文件名
        file_name = csv_row['姓名'] + '.csv'
        # 拼接新文件路径
        file_path = result_path + file_name

        # 创建新文件并添加数据
        with open(file_path, 'w', encoding='utf-8', newline='') as target_file:
            # 将文件对象转换为DictWriter对象
            target_writer = csv.DictWriter(target_file, fieldnames=headers)
            # 写入表头
            target_writer.writeheader()
            # 写入数据
            target_writer.writerow(csv_row)

 2、执行流程图

3、CSV文件

csv是"Comma-Separated Values(逗号分割的值)"的首字母缩写,它其实和txt文件一样,都是纯文本文件。但csv文件可以显示为电子表格的样式,所以我们也可以把csv文件视为一种简化版的电子表格。

csv文件有多种打开方式,如果你使用文本编译器(如记事本)打开它,它就会以文本形式显示;但如果你使用常用的office软件(Excel表格,WPS表格,Numbers表格)打开,csv就会直接显示为表格样式。

函数open()不仅可以打开txt文本文件,它也可以用来打开csv文件。使用open()打开的文件,都会返回一个文件对象。

与打开txt文本文件稍有不同的地方是,我们需要在open()中传入新的参数newline=''。根据Python官方文档的相关规定,当我们打开csv文件时,需要设置参数newline='',这样可以避免一些不必要的空行。

4、更好地文件打开方式

with open() as ...是对原有open()close()的优化。

使用with open() as ...语句后,在with下面的代码块结束时,会自动执行close()关闭文件

语法:

对比:

5、函数reader()和类DictReader

reader()函数是csv模块内的一个函数,当使用open()打开csv文件,得到文件对象后,可以把这个文件对象传入reader()函数

语法(框内为重点):

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

DictReader类的操作类似于常规的reader(),但DictReader会将读取到的信息转换为字典形式

语法:

实例化DictReader类后,会得到一个DictReader对象,这是一个可迭代对象,我们可以使用循环来遍历它的每一个元素。但不同于reader()的是,该对象里面的每一个元素都是一个字典,每一个字典的值都可以对应csv文件中的一行,对应csv文件的表头。

这个类还有个属性fieldnames,该属性可以将csv文件(表格)的表头(第一行)读取出来,返回值是列表。这个表头也就是字典的键(key)。

6、函数writer()与类DictWriter

writer语法:

要将内容写入csv文件,需要先把open()返回的文件对象转化为writer对象

然后需要调用writer对象的方法writerow(row),该方法会将参数row当作一行内容写入csv文件中。

参数row代表了你想要写入csv文件的内容,它必须是一个可迭代对象,这里推荐使用列表。

DictWriter类语法:

DictWriter的操作类似于常规的writer(),但DictWriter会将字典写入(映射)到csv文件的行中。

即通过DictWriter写入的行,都必须是字典形式

所以,当我们需要将字典类型的数据写入csv文件时,使用DictWriter会是一种更好的选择

在实例化DictWriter时,必须要传入参数fieldnames

它的作用是设置csv文件的第一行数据(即表头数据)。当我们要将字典通过DictWriter对象写入csv文件时,通常会把字典的键(key)存入一个列表,再把这个列表传给参数fieldnames

如下图:

实例化DictWriter后,会得到一个DictWriter对象,我们需要通过该对象来调用两个方法来写入内容。

第一个方法:writeheader(),该方法可将表头(即字典中的键(key))写入csv的第一行。

也就是说,如果要写入表头,不仅要在DictWriter中传入参数fieldnames,还需要调用writeheader()方法

第二个方法:writerow(row),与writer对象调用writerow(row)不同的是,这里的参数row必须是字典形式的数据。

在写入时,该方法会根据字典的键,找到相应的表头,然后再将此键对应的值写入表头对应的列:

 

——end


版权声明:本文为weixin_49657263原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。