• CSV文件简介

        CSV(Comma-Separated Values),逗号分隔值
    
        CSV是一个被行分隔符、列分隔符划分成行和列的文本文件.没有指定字符编码.
        详情参看 RFC 4180 :https://www.ietf.org/html/rfc4180
    
        行分隔符为\r\n,最后一行可以没有换行符
        列分隔符常为逗号或制表符
        每一行数据称为一条记录(record)
        一行中被列分隔符分成的一个个独立数据,称为一个字段
    
        字段可以使用双引号括起来,也可以不使用.(有些程序会自动帮你替换)
        如果字段中出现了双引号、逗号、换行符必须使用双引号括起来.
        如果字段的值是双引号,使用两个双引号表示一个转义.("""")
    
        表头可选,和字段列对齐即可.
  • 手动生成CSV文件

    from pathlib import Path
    
    p = Path('G:/csv/a.csv')         # CSV文件路径
    parent = p.parent 
    if not parent.exists():          # 判断目录是否存在
        parent.mkdir(parents=True)
    
    # "\"反斜杠此处表示折行,这样保证第一行不为空行
    csv_body = """\
    id,name,age,comment
    1,tom,18,"i'm 18"
    2,jerry,"this is a ""test"" string."
    3,sadan,"中国
    
    国庆
    "
    """
    p.write_text(csv_body)
  • csv模块

两个函数:

reader(fileobj,dialect='excel',**fmtparams)
返回DictReader的实例,是个行迭代器

delimiter 列分隔符,缺省值为逗号
lineterminator 行分隔符,缺省值为\r\n
quotechar 字段的引用符号,缺省为'"',双引号

双引号的处理:
doublequote 双引号的处理,默认为True.
如果"和quotechar为同一个,True则使用2个双引号表示
False表示使用转义字符作为双引号的前缀.例:"\""
escapechar 设定转义字符,默认为None.默认转义符为"\"
quoting 指定双引号的规则
    QUOTE_ALL 所有字段都有加引号
    QUOTE_MINIMAL 特殊字符字段才加引号
    QUOTE_NONNUMERIC 非数字字段需要加引号
    QUOTE_NONE 都不使用引号


writer(csvfileobj, dialect='excel', **fmtparams)
返回DictWriter的实例

主要方法有:
    writerow(iterable)  将一个可迭代对象中所有元素写在一行
    writerows(iterable) 将一个可迭代对象的多个元素写入多行

示例:
from pathlib import Path
import csv

p = Path('G:/csv/b.csv')

row = [1,'one',2,'two']
row = ['1','one','2','two']
rows = [
    (3,'tom',4,'jerry'),
    (5,'ls\t','6','ss')
]

with open(str(p),'w') as f:
    writer = csv.writer(f)
    print(type(writer))
    # writer.writerow(rows)  # 将多个元组写入一行
    # writer.writerows(row)  # 将可迭代对象元素写成多行
    writer.writerow(row)
    writer.writerows(rows)

with open(str(p),'r') as f:
    reader = csv.reader(f)
    print(type(reader))
    for line in reader:
        print(line)