python处理CSV文件
CSV文件
CSV即逗号分隔值 Comma-Separated Values
- 它是一个被行分隔符、列分隔符划分成行和列的文本文件
- CSV不指定字符编码
- 每一行称为一条记录record
- 表头可选,和字段列对齐就行了
分隔符
- 行分隔符为\r\n,最后一行可以没有换行符
- 列分隔符常为逗号或者制表符
字段
- 字段可以使用双引号括起来,也可以不适用
- 如果字段中出现了双引号、逗号、换行符必须使用双引号括起来
- 如果字段的值是双引号,使用两个双引号表示一个转义
csv模块
csv.reader(csvfile ,dialect=’execl’, **fmtparams) 返回一个reader对象,是一个行迭代器。
默认使用execl方言,如下:
- 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都不使用引号
csv.writer(csvfile , dialect=’excel’ , **fmtparams) 返回DictWriter的实例
主要方法有单行writerow、多行writerows
import csv
rows = [
( 'id', 'name', 'age', 'comment'),
[1, 'tom', 20, 'tom'],
(2, 'jerry', 18, 'jerry'),
(3, 'justin', 22, 'just\t"in'),
"abcdefgh",
((1,), 2, [3])
]
# newline='' 表示写入时,不要做\n 的替换,那么输出就是\r\n
with open("/Users/dujie/Desktop/test.csv",'w+',encoding='utf-8',newline="") as f:
writer = csv.writer(f)
writer.writerow(rows[0])
writer.writerows(rows[1:])
#newline='' 表示读取时,也不做\n的替换
with open("/Users/dujie/Desktop/test.csv",encoding="utf-8" ,newline="") as f1:
reader = csv.reader(f1) #行迭代器
print(next(reader))
print(next(reader))
for line in reader:
print(line,type(line))
['id', 'name', 'age', 'comment']
['1', 'tom', '20', 'tom']
['2', 'jerry', '18', 'jerry'] <class 'list'>
['3', 'justin', '22', 'just\t"in'] <class 'list'>
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] <class 'list'>
['(1,)', '2', '[3]'] <class 'list'>
每一行写入一个可迭代对象,可迭代的每一个元素,将作为csv行中的每一列的元素。
windows下会在每行末尾多出一个\r,解决方法 open(‘test.csv’ , ‘w’, newline=””)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 J.のblog!
评论