暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Python 简单操作 CSV

做一个柔情的程序猿 2020-09-05
327

前言

这次梳理的篇幅主要是涉及CSV以及如何通过python对CSV进行操作等,对巩固自己的python知识也是很有帮助的,进一步的对CSV的使用而言也是帮助很大的。

但更多的是抛砖引玉,希望对你们有所帮助。

感谢各位鼓励与支持🌹🌹🌹,往期文章都在最后梳理出来了(●'◡'●)

接下来就以问题的形式展开梳理👇

CSV简介

CSV,CSV 全称 Comma-Separated Values,中文叫逗号分隔值或字符分隔值,它以纯文本形式存储表格数据(数字和文本),其本质就是一个字符序列,可以由任意数目的记录组成,记录之间以某种换行符分隔,每条记录由字段组成,通常所有记录具有完全相同的字段序列,字段间常用逗号或制表符进行分隔。CSV 文件格式简单、通用,在现实中有着广泛的应用,其中使用最多的是在程序之间转移表格数据


CSV与Excel区别

Python 通过 csv 模块来实现 CSV 格式文件中数据的读写,该模块提供了兼容 Excel 方式输出、读取数据文件的功能,这样我们无需知道 Excel 所采用 CSV 格式的细节,同样的它还可以定义其他应用程序可用的或特定需求的 CSV 格式。

csv 模块中使用 reader 类 writer 类读写序列化的数据,使用 DictReader 类 DictWriter 类以字典的形式读写数据,下面来详细看一下相应功能。首先来看一下 csv 模块常量信息,如下所示:

属性说明
QUOTE_ALL指示 writer 对象给所有字段加上引号
QUOTE_MINIMAL指示 writer 对象仅为包含特殊字符(如:定界符、引号字符、行结束符等)的字段加上引号
QUOTE_NONNUMERIC指示 writer 对象为所有非数字字段加上引号
QUOTE_NONE指示 writer 对象不使用引号引出字段

write(csvfile,dialect='excel',**fmtparams)

返回一个 writer 对象,该对象负责将用户的数据在给定的文件类对象上转换为带分隔符的字符串。👇
  • csvfile 可以是具有write()方法的任何对象,如果csvfile是文件对象,则使用 newline=’’打开;

  • 可选参数 dialect是用于不同的 CSV 变种的特定参数组;

  • 可选关键字参数 fmtparams 可以覆写当前变种格式中的单个格式设置。

请看如下代码:👇
    import csv

    with open('test.csv', 'w', newline='') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(['id', 'name', 'age'])
    # 写入多行
    data = [('1001', '张三', '21'), ('1002', '李四', '31')]
    writer.writerows(data)

    运行程序,效果如下:👇

    reader(csvfile,dialect='excel',**fmtparams)

    返回一个 reader 对象,该对象将逐行遍历 csvfile,csvfile 可以是文件对象和列表对象,如果是文件对象要使用 newline=’’ 打开。看下示例:👇

      import csv

      with open('test.csv', newline='') as csvfile:
      reader = csv.reader(csvfile, delimiter=' ')
      for row in reader:
      print(', '.join(row))

      运行程序,效果如下:👇

      Sniffer类

      用于推断 CSV 文件的格式,该类提供了如下两个方法:👇
      sniff(sample, delimiters=None)
      分析给定的 sample,如果给出可选的 delimiters 参数,则该参数会被解释为字符串,该字符串包含了可能的有效定界符。
      has_header(sample)
      分析示例文本(假定为 CSV 格式),如果第一行很可能是一系列列标题,则返回 True。
      该类及方法使用较少,了解即可,下面通过一个示例简单了解一下。👇
        import csv

        with open('test.csv', newline='') as csvfile:
        dialect = csv.Sniffer().sniff(csvfile.read(1024))
        csvfile.seek(0)
        reader = csv.reader(csvfile, dialect)
        for row in reader:
        print(row)

        Reader类

        Reader 对象指 DictReader 实例和 reader() 函数返回的对象,下面看一下其公开属性和方法。👇
        next()
        返回 reader 的可迭代对象的下一行,返回值可能是列表或字典。
        dialect
        dialect 描述,只读,供解析器使用。
        line_num
        源迭代器已经读取了的行数。
        fieldnames
        字段名称,该属性为 DictReader 对象属性。

        Writer对象

        Writer 对象指 DictWriter 实例和 writer() 函数返回的对象,下面看一下其公开属性和方法。👇
        writerow(row)
        将参数 row 写入 writer 的文件对象。
        writerows(rows)
        将 rows*(即能迭代出多个上述 *row 对象的迭代器)中的所有元素写入 writer 的文件对象。
        writeheader
        在 writer 的文件对象中,写入一行字段名称,该方法为 DictWriter 对象方法。
        dialect
        dialect 描述,只读,供 writer 使用。


        python下CSV的写读追加状态

        请看如下:👇

          'r':读
          'w':写
          'a':追加
          'r+' == r+w(可读可写,文件若不存在就报错(IOError))
          'w+' == w+r(可读可写,文件若不存在就创建)
          'a+' ==a+r(可追加可写,文件若不存在就创建)
          对应的,如果是二进制文件,就都加一个b就好啦:
          'rb'  'wb'  'ab'  'rb+'  'wb+'  'ab+'


          「❤️ 感谢大家」

          如果你觉得这篇内容对你挺有有帮助的话:

          1. 点赞支持下吧,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)
          2. 欢迎在留言区与我分享你的想法,也欢迎你在留言区记录你的思考过程。
          3. 觉得不错的话,也可以阅读近期梳理的文章(感谢掘友的鼓励与支持🌹🌹🌹):

          「❤️ 资源传送门」

          1. 扫码关注【做一个柔情的程序猿】公众号

          2. 在【做一个柔情的程序猿】后台回复 【python资料】【2020秋招】 获取相应资料

          👆长按上方二维码 2 秒
          回复「python资料即可获取python学习资料
          回复「2020秋招即可获取2020秋招面试题及答案


          文章转载自做一个柔情的程序猿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论