CSV,全稱為Comma-Separated Values瘤运,中文可以叫作逗號分隔值或字符分隔值窍霞,其文件以純文本形式存儲表格數(shù)據(jù)。該文件是一個字符序列拯坟,可以由任意數(shù)目的記錄組成但金,記錄間以某種換行符分隔。每條記錄由字段組成郁季,字段間的分隔符是其他字符或字符串冷溃,最常見的是逗號或制表符。不過所有記錄都有完全相同的字段序列梦裂,相當于一個結(jié)構(gòu)化表的純文本形式似枕。它比Excel文件更加簡介,XLS文本是電子表格年柠,它包含了文本凿歼、數(shù)值、公式和格式等內(nèi)容冗恨,而CSV中不包含這些內(nèi)容答憔,就是特定字符分隔的純文本,結(jié)構(gòu)簡單清晰掀抹。所以攀唯,有時候用CSV來保存數(shù)據(jù)是比較方便的】释瑁【引自崔慶才的《python3網(wǎng)絡爬蟲開發(fā)實戰(zhàn)》】
我在使用爬蟲進行數(shù)據(jù) 存儲的時候,若不使用數(shù)據(jù)庫,則更多的會選擇csv谱轨。
現(xiàn)有test.csv戒幔,內(nèi)容如下:
學號 | 姓名 | 性別 | 年齡 |
---|---|---|---|
1 | 小明 | 男 | 11 |
2 | 小花 | 女 | 12 |
3 | 小李 | 男 | 13 |
一.讀
import csv
with open('test.csv', 'r', encoding='utf-8') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
print(row)
運行結(jié)果:
['學號', '姓名', '性別', '年齡']
['1', '小明', '男', '11']
['2', '小花', '女', '12']
['3', '小李', '男', '13']
- 這里的
encoding
視文件的具體編碼格式?jīng)Q定,不一定是utf-8土童; - 上面的reader為可迭代對象诗茎,也是迭代器,故若不要第一行列索引献汗,可直接在for前面進行
next(reader)
敢订,迭代一次,從而沒有第一行數(shù)據(jù)罢吃; - 可用
isinstance()
判斷一個對象是否為某種類型楚午,如下:
from collections import Iterable, Iterator
isinstance(對象, Iterable)
isinstance(對象, Iterator)
二.寫
1.列表
將數(shù)據(jù)寫入形成如上的test.csv
import csv
with open('test.csv', 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(['學號', '姓名', '性別', '年齡'])
writer.writerow(['1', '小明', '男', '11'])
writer.writerow(['2', '小花', '女', '12'])
writer.writerow(['3', '小李', '男', '13'])
或使用writerows
,很明顯writerow為一行一行地寫入尿招,writerows為多行一起寫入:
import csv
row1 = ['學號', '姓名', '性別', '年齡']
row2 = ['1', '小明', '男', '11']
row3 = ['2', '小花', '女', '12']
row4 = ['3', '小李', '男', '13']
with open('test.csv', 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
writer.writerows([row1, row2, row3, row4])
若csv文件出現(xiàn)隔行的情況矾柜,則需要加入?yún)?shù)newline=''
2.字典
import csv
headers = ['學號', '姓名', '性別', '年齡']
rows = [
{'學號':1,'姓名':'小明','性別':'男','年齡':11},
{'學號':2,'姓名':'小花','性別':'女','年齡':12},
{'學號':3,'姓名':'小李','性別':'男','年齡':13},
]
with open('test.csv','w',newline='') as csvfile:
writer= csv.DictWriter(csvfile,headers)
writer.writeheader()
writer.writerows(rows)
- 寫入csv中的數(shù)據(jù)可以為字符串也可以為其他數(shù)據(jù)類型,但讀的時候會都轉(zhuǎn)為字符串就谜;
- 若寫入方式為
'a'
追加怪蔑,則可以把writer.writeheader()
去掉,否則會再次寫入列索引丧荐,但無論w還是a缆瓣,列索引headers 還是要定義的...
二.特別注意
csv說白了就是文本文件,所以不存在多個sheet的問題
【持續(xù)更新中虹统,錯誤請指出弓坞,謝謝!?呷础昼丑!】