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='@') , 遇到双引号,使用转义字符
- doublequote 双引号的处理,
- 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() 返回的是一个行迭代器,打印的内容都是字符串类型
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:])
由上可知:
- writerow 对传入对象,只做一次迭代
- writerows 对传入对象,做多次迭代
- 打开文件时,不添加 newline参数,会将 \n 替换为 \r\n 也就会造成上面结尾的异常
newline='' 表示写入时,不做\n 到 \r\n 的替换
https://www.hugbg.com/archives/2327.html
评论