Python CSV文件操作

1,176 阅读4分钟

这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战

复习回顾

我们日常工作中总是离不开对各类文件操作,强大的Python也提供我们对不同文件的模块方法。

  • Python内置提供open()、write()等基本的读取操作
  • 对文本进行删除、移动、复制等高级的操作的shutil模块
  • 对文件路径提供的相关操作,os.path、pathlib模块
  • 创建临时目录、文件等操作的template模块
  • 还有对文件进行专门的压缩、解压的zipfile、tarfile、gzip等模块

image.png

本期,我们将学习通过Python CSV库对Excel表格进行相关操作学习,let's go~

1. CSV 模块概述

csv 模块是python内置库,专门提供对电子表格.csv结尾的文件操作方法。

  • 什么是 csv 文件

    • csv 是使用逗号分隔值文件格式,可以使用记事本或者Excel打开
    • csv 文件以纯文本形式存在,通常用作数据存储使用
    • csv 文件每条记录都有同样的字段序列
  • csv 模块特点

    • csv 模块实现对csv文件表格数据的读写
    • csv 兼容Excel输出的数据文件
    • csv 可以定义其他程序CSV格式
  • csv 模块使用

    csv 模块是Python内置的,因此只需在代码中使用import来进行导入即可

    import csv
    

2. CSV 相关方法

  • csv 模块提供相关方法

方法作用
csv.reader(csvfile)对csv文件进行逐行变量
csv.writer(csvfile)将用户数据写入到指定的文件对象中并转换成分隔符的字符串
csv.register_dialect(name,[,dialect])将dialect与name关联起来
csv.unregister(name)从变种注册表中删除name对应变种
csv.get_dialect(name)返回name对应的变种
csv.list_dialects()返回所有已注册变种的名称
csv.field_size_limit()返回解析器当前运行最大自短板大小

  • csv 模块提供相关属性

属性作用
csv.QUOTE_ALL指示writer对象给所有字段加上引号
csv.QUOTE_MINIMAL指示writer对象仅包含特殊字符的字段加上引号
csv.QUOTE_NONNUMERTC指示writer对象为所有非数字字段转换为float类型
csv.QUOTE_NONE指示writer对象不使用引号引出字段

  • csv 模块提供相关类方法

方法作用
class csv.DictReader(f,filedname,restkey,restval,dialect='excel',*args,**kwds)创建一个可以映射到一个dict的对象
class csv.DictWriter(f,filedname,restkey,restval,dialect='excel',*args,**kwds)创建一个可以以字典形式写入到输出行
class csv.dialect是一个容器类,属性包含如何处理双引号、空白符、分隔符
class csv.excel定义Excel生成csv文件的常规属性
class csv.excel_tab定义Excel生成制表符分隔的CSV文件常规属性
class csv.unix_dialect定义在UNIX系统上生成CSV文件常规属性
class csv.Sniffer推断CSV文件格式

  • csv.DictReader 实例对象属性

方法作用
csvreader.next()等同于next(reader)返回迭代对象下一行
csvreader.dialect变化描述,只读
csvreader.line_num源迭代器一级读了的行数
csvreader.filednames字段名称

  • csv.DictWriter 实例对象属性

方法作用
csvwriter.writerow(row)将row形参写入到writer文件对象
csvreader.writerows(rows)将row* 中所有元素写入到writer文件对象

  • csv.Dialect 实例对象属性

方法作用
Dialect.delimiter一个用于分隔字段的单字符,默认为“,”
Dialect.doublequote控制出现在字段中引号字符本身如何被引出
Dialect.escapechar用于writer的单字符
Dialect.lineterminator放在writer产生行的结尾,默认"\r\n"
Dialect.quotechar单字符,用于包住有特殊字符的字段
Dialect.quoting控制writer何时生成引号
Dialect.skipinitialspace如果为True,则忽略,默认为False
Dialect.strict如果为True则输入错误的CSV时抛出error异常,默认为False

3. 小试牛刀

我们根据上面已经学习到的cvs模块的方法来实操一下吧

  • 读取指定csv文件中数据,并逐行打印出来

    • 我们要使用with上下文管理器进行打开csv文件
    • 设置dialect属性 delimiter 字符串有效界定符为“,”
    • 设置quotechar属性,quotechar 包含特殊字符的字段
     import csv
    
    
     with open(r"C:\Users\user\Desktop\devices.csv",newline="") as content:
         content = csv.reader(content,delimiter=",",quotechar="|")
         for row in content:
    
             print("-".join(row))
    

总结

本期,我们对python内置模块csv相关方法进行学习,了解csv文件格式通常用于数据存储的。

我们在工作中,遇到需要存储数据的,也可以使用csv文件来存储。

以上是本期内容,欢迎大佬们点赞评论,下期见~