前言
快要畢業那會兒,在下編寫了一個招聘網站招聘崗位的爬蟲提供給前女神參考,最開始我是存到mysql中,然后在到處一份csv文件給前女神。到了參加工作后,由於經常使用excel繪制圖表(誰叫公司做報表全用excel呢…………….),在下才瞬間頓悟,有時候將爬蟲爬取的數據直接存到csv中或許會更加方便一些!
既然涉及到爬蟲的寫入文件,那這里我就先介紹python對csv的寫!
1、csv的寫
python自帶了csv模塊提供用戶對csv文件進行讀寫操作,要對csv文件進行寫操作,首先要創建一個writer對象,參考help(csv.writer),情況如下
調用writer對象的前提是:需要傳入一個文件對象,然后才能在這個文件對象的基礎上調用csv的寫入方法writerow(寫入一行)writerrow(寫入多行)。寫入數據的代碼如下:
import csv
headers = ['class','name','sex','height','year']
rows = [
[1,'xiaoming','male',168,23],
[1,'xiaohong','female',162,22],
[2,'xiaozhang','female',163,21],
[2,'xiaoli','male',158,21]
]
with open('test.csv','w')as f:
f_csv = csv.writer(f)
f_csv.writerow(headers)
f_csv.writerows(rows)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
這段代碼我首先定義了寫入csv文件的表頭、每一列的內容,然后打開一個csv文件,將文件對象作為參數傳給csv.writer(),最后將表頭和每一行的內容寫入到csv文件中。
執行結果:
注意:如果打開csv文件出現空行的情況,那么需要添加一個參數 newline=”(我使用windows出現了這種情況,使用linux mint沒有出現)
with open('test.csv','w',newline='')as f:
1
2、寫入字典序列的數據
參考help(csv.DictWriter)可知,在寫入字典序列類型數據的時候,需要傳入兩個參數,一個是文件對象——f,一個是字段名稱——fieldnames,到時候要寫入表頭的時候,只需要調用writerheader方法,寫入一行字典系列數據調用writerrow方法,並傳入相應字典參數,寫入多行調用writerows
具體代碼如下:
import csv
headers = ['class','name','sex','height','year']
rows = [
{'class':1,'name':'xiaoming','sex':'male','height':168,'year':23},
{'class':1,'name':'xiaohong','sex':'female','height':162,'year':22},
{'class':2,'name':'xiaozhang','sex':'female','height':163,'year':21},
{'class':2,'name':'xiaoli','sex':'male','height':158,'year':21},
]
with open('test2.csv','w',newline='')as f:
f_csv = csv.DictWriter(f,headers)
f_csv.writeheader()
f_csv.writerows(rows)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
運行結果:
3、csv文件的讀
讀取csv時需要使用reader,並傳如一個文件對象,而且reader返回的是一個可迭代的對象,需要使用for循環遍歷,代碼如下:
import csv
with open('test.csv')as f:
f_csv = csv.reader(f)
for row in f_csv:
print(row)
1
2
3
4
5
運行結果:
在上面,row是一個列表,如果想要查看固定的某列,則需要加上下標,例如我想要查看name,那么只需要改為row[1]
import csv
with open('test.csv')as f:
f_csv = csv.reader(f)
for row in f_csv:
print(row[1])
1
2
3
4
5
---------------------
版權聲明:本文為CSDN博主「katyusha1」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/katyusha1/article/details/81606175