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=‘ ’)