Python_CSV

本文介绍了CSV文件的基础概念,包括其格式、分隔符、编码以及Python中的csv模块的使用方法。重点讲解了csv.reader和csv.writer的区别,以及如何处理包含特殊字符的行。通过实例演示了如何正确地使用这些功能来读取和写入CSV文件,适合初学者理解CSV操作技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

csv文件

CSV文件简介

https://www.ietf.org/rfc/rfc4180.txt 参考文档

CSV即逗号分隔值,列分割符划分成commsa-Seqarated value

  • 它是一个行分隔符,列分隔符划分成行和列
  • CSV不指定字符编码
  • 每一行称之为一次记录record
  • 表头可选,和列字段对其即可

分割符

  • 行分隔符为/r/n
  • 列分隔符常为逗号或者制表符

字段

  • 字段可以使用双引号括起来也可以不使用
  • 如果字段中出现双引号,逗号,换行符必须使用双引号括起来
  • 如果字段的值是双引号,使用两个双引号为转义

CSV模块

csv.reader(csvfile,dialect='excel',**fmtparams) 返回一个reader对象,是一个迭代器

默认使用excel方言如下:

  • delimiter 列分隔符,逗号
  • lineterminator 行分隔符 \r\n
  • quotechar 字段用双引号“
  • 双引号处理
    • doublequote 双引号处理默认为true,如果碰到数据中有双引号,而quotechar也是双引号,则用两个双引号表示,false表示使用转义符将双引号的前缀.
    • escapechar 一个转义符,默认none
    • writer = csv.writer(f,doublequote=false,escapechar=‘@’),遇到双引号必须提供 转义符
  • quoting指定双引号规则
    • QUOTE_ALL所有字段
    • QUOTE_MINIMAL 特殊字符字段,excel方言使用此规则
    • QUOTE_NONUMERIC 非数字字段
    • QUOTE_NONE都不使用引号

csv.writer(csvfile,dialect=‘excel’,**fmtparams) 返回dictwriter实例

主要方法 writerow() writerows() 两者区别

思考这打出来是个啥???

import csv



row = [
    ['id','name','age','comment'],
    [ 1,'gaga','20', 'gaga'],
    ( 2,'huanghuang','30','huanghuang' ),
    ( 3 , 'asda' , '20' , '123\t456'),
    ('123141243'),
    ['1231241231'],
    ( (1),[299],3)
]

filename='d:/python/test.csv'

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

with open(filename,encoding='utf-8',newline='') as f :
    reader = csv.reader(f)
    print (next(reader))
    print (next(reader))
    for line in reader :
        print (line)

二者区别

import csv



row = [
    ['id','name','age','comment'],
    [ 1,'gaga','20', 'gaga'],
    ( 2,'huanghuang','30','huanghuang' ),
    ( 3 , 'asda' , '20' , '123\t456'),
    ('123141243'),
    ['1231241231'],
    ( (1),[299],3)
]

filename='d:/python/test.csv'

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

with open(filename,encoding='utf-8',newline='') as f :
    reader = csv.reader(f)
    print (next(reader))
    print (next(reader))
    for line in reader :
        print (line)

实验证明 writerow是单行写入,writerows是多行写入二者区别

['id', 'name', 'age', 'comment']
["[1, 'gaga', '20', 'gaga']", "(2, 'huanghuang', '30', 'huanghuang')", "(3, 'asda', '20', '123\\t456')", '123141243', "['1231241231']", '(1, [299], 3)']

--------------------------------------------------------
['id', 'name', 'age', 'comment']
['1', 'gaga', '20', 'gaga']
['2', 'huanghuang', '30', 'huanghuang']
['3', 'asda', '20', '123\t456']
['1', '2', '3', '1', '4', '1', '2', '4', '3']
['1231241231']
['1', '[299]', '3']

windows 下会在每一行的末尾加入个/r ,解决办法open(filename ,’w’,newline=‘ ’)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值