05-1 | 处理CSV文件

逸兴
逸兴
逸兴
57
文章
25
评论
2020-04-2215:03:23
评论
1698字阅读5分39秒
摘要

python处理csv文件

CSV文件简介:

csv文件是一种通用的纯文本文件,由行和列组成。

  • CSV文件通过逗号分隔值。分为行和列
  • 以\r\n 为行分隔符,最后一行没有换行符
  • 以逗号或则制表符为列分隔符
  • 每一行称为一条记录record
  • 字段可以使用双引号括起来,也可以不用
  • 如果字段出现了 双引号,逗号,换行符 必须使用双引号括起来
  • 如果字段的值是双引号,使用两个双引号表示一个转义

例如:某一个字段的值为

a"b
就要写为
a""b
,使用一个双双引号来转义。

csv模块

python中操作csv文件的模块名为csv模块。他有两个方法分别为:

reader

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

返回一个reader对象,是一个行迭代器

默认使用Excel 方言:

  • delimiter 列分隔符,逗号
  • lineterminator 行分隔符\r\n
  • quotechar 字段的引用符号,缺省为 " 双引号
  • 双引号的处理
    • doublequote 双引号的处理,
      • 默认为True, 如果碰到数据中有双引号,而quotechar也是双引号,True 则使用2个双引号表示。
      • 如果为False 表示使用转义字符来做双引号的前缀
    • escapechar 一个转义字符,默认为 None
    • writer = csv.writer(f, doublequote=False, escapechar='@') , 遇到双引号,使用转义字符
  • quoting 指定双引号的规则
    • QUOTE_ALL 所有字段
    • QUOTE_MINIMAL 特殊字符字段,Excel 方言默认使用该规则
    • QUOTE_NONNUMERIC 非数字字段
    • QUOTE_NONE 都不使用引号

使用示例:

import csv

row = [
    ("id", "name", "age", "sex", "class"),
    [1, "tom", "14", "m", "N27"],
    (2, "jerry", "15", "w", "N17"),
    [3, 'mar', 14, 'w', 'N26"-"1']
]

filename = "student.csv"

with open(filename, "w+", encoding='utf-8', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(row[0])
    writer.writerows(row[1:])

with open(filename, encoding='utf-8', newline='') as f:
    reader = csv.reader(f)   # csv.reader() 返回的是一个行迭代器
    print(next(reader))
    for line in reader:
        print(line)
需要注意,csv.reader() 返回的是一个行迭代器,打印的内容都是字符串类型
05-1 | 处理CSV文件

writer

主要方法有 writerow 和 writerows ,

注意对应writerrow和writerows传递的参数必须是一个可迭代对象。

使用示例:

import csv

row = [
    ("id", "name", "age", "sex", "class"),
    [1, "tom", "14", "m", "N27"],
    (2, "jerry", "15", "w", "N17"),
    [3, 'mar', 14, 'w', 'N26"-"1']
]

filename = "student.csv"

with open(filename, "w+", encoding='utf-8') as f:
    writer = csv.writer(f)  # 获得一个writer对象,writer()对象传入的是一个文件对象
    writer.writerow(row[0])  # 这个writer对象有两个方法 writerow和writerows
    writer.writerows(row[1:])
05-1 | 处理CSV文件

由上可知:

  1. writerow 对传入对象,只做一次迭代
  2. writerows 对传入对象,做多次迭代
  3. 打开文件时,不添加 newline参数,会将 \n 替换为 \r\n 也就会造成上面结尾的异常

newline='' 表示写入时,不做\n 到 \r\n 的替换

05-1 | 处理CSV文件



https://www.hugbg.com/archives/2327.html
逸兴
  • 本文由 发表于 2020-04-2215:03:23
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
01-1 数据类型 基础语法

01-1 数据类型

第一章 数据类型 使用type() 函数可以查看数据类型 1.1 字符串 str 字符串是使用单引号或双引号括起来的任意文本。 比如'abc', '123'等 字符串类型 字符串类型用str表示 st...
09-5 | asyncio基本使用 并发编程

09-5 | asyncio基本使用

第一节 关于asyncio asyncio 在3.4 版本中加入到标准库, asyncio基于selector实现, 看似库, 其实是个框架, 包含异步IO, 事件循环, 协程, 任务等内容。 通过a...
09-4 | 全局解释器锁 & 多进程 & 池 并发编程

09-4 | 全局解释器锁 & 多进程 & 池

GIL CPython 在解释器进程级别有一把锁,叫做GIL,即全局解释器锁。 GIL 保证CPython进程中,只有一个线程执行字节码。甚至是在多核CPU的情况下,也只允许同时只能 有一个CPU核心...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: