爬蟲系列9CSV模組

2021-08-10 17:36:14 字數 3131 閱讀 9627

csv檔案格式是一種通用的電子**和資料庫匯入匯出格式。

1、檔案讀寫

首先開啟乙個檔案,以二進位制形式開啟

用csv.reader(file)讀取檔案,返回列表

for row in reader:

row[0] row[1]

用csv.writer(file)寫入檔案

writer.writerows(someiterable)

# 讀取csv檔案

import csv

with

open('some.csv', 'rb') as f: # 採用b的方式處理可以省去很多問題

reader = csv.reader(f)

for row in reader:

# do something with row, such as row[0],row[1]

import csv

with

open('some.csv', 'wb') as f: # 採用b的方式處理可以省去很多問題

writer = csv.writer(f)

writer.writerows(someiterable)

預設的情況下, 讀和寫使用逗號做分隔符(delimiter),用雙引號作為引用符(quotechar),當遇到特殊情況是,可以根據需要手動指定字元。

import csv

with

open('passwd', 'rb') as f:

reader = csv.reader(f, delimiter=':', quoting=csv.quote_none)

for row in reader:

print row

上述示例指定冒號作為分隔符,並且指定quote方式為不引用。這意味著讀的時候都認為內容是不被預設引用符(")包圍的。quoting的可選項為: quote_all,

quote_minimal, quote_nonnumeric, quote_none.

有點需要注意的是,當用writer寫資料時, none 會被寫成空字串,浮點型別會被呼叫 repr() 方法轉化成字串。所以非字串型別的資料會被 str() 成字串存

儲。所以當涉及到unicode字串時,可以自己手動編碼後儲存或者使用csv提供的 unicodewriter,

字典方式讀寫:

cs模組提供的字典讀寫模組格式如下:

class csv.dictreader(csvfile, fieldnames=none, restkey=none, restval=none, dialect='excel', *args, **kwds)

class csv.dictwriter(csvfile, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)

其中fieldnames指定字典的key值,如果reader裡沒有指定那麼預設為第一行的元素,在writer裡一定要指定這個

使用例項:

# 讀》 import csv

>>> with open('names.csv') as csvfile:

... reader = csv.dictreader(csvfile)

... for row in reader:

... print(row['first_name'], row['last_name'])

...baked beans

lovely spam

wonderful spam

# 寫import csv

with open('names.csv', 'w') as csvfile:

fieldnames = ['first_name', 'last_name']

writer = csv.dictwriter(csvfile, fieldnames=fieldnames)

writer.writeheader()

writer.writerow()

writer.writerow()

writer.writerow()

字元編碼問題

import csv

def unicode_csv_reader(unicode_csv_data, dialect=csv.excel, **kwargs):

# csv.py doesn't do unicode; encode temporarily as utf-8:

csv_reader = csv.reader(utf_8_encoder(unicode_csv_data),

dialect=dialect, **kwargs)

for row in csv_reader:

# decode utf-8 back to unicode, cell by cell:

yield [unicode(cell, 'utf-8') for cell in row]

def utf_8_encoder(unicode_csv_data):

for line in unicode_csv_data:

yield line.encode('utf-8')

格式引數:

delimiter ,

doublequote

escapechar

lineterminator \r\n

quotechar "

" quoting quote_minimal

skipinitialspace

strict

常用方法:

讀方法:

csvreader.next() 讀取下一行

csvreader.dialect a read-only description of the dialect in use by the parser.

csvreader.line_num 從迭代器中讀取行號,乙個資源可能佔據多行,所以不等於**行號

寫方法:

csvwriter.writerow(row)

csvwriter.writerows(rows)

csvwriter.dialect

dictwriter.writeheader() 編寫檔案名字

小爬蟲系列

玩玩小爬蟲 抓取時的幾個小細節 摘要 這一篇我們聊聊在頁面抓取時應該注意到的幾個問題。一 網頁更新 我們知道,一般網頁中的資訊是不斷翻新的,這也要求我們定期的去抓這些新資訊,但是這個 定期 該怎麼理解,也就是多長時間需要抓一次該頁面,其實這個定期也就是頁面快取時間,在頁面的快取時間內我們再次抓取該網...

爬蟲系列二

6.3.re庫的match物件 6.4.貪婪匹配和最小匹配 七 練習 一切為了資料探勘的準備 在中國大學mooc 上學習的北京理工大學嵩天老師的免費爬蟲課程課件,簡單易懂,感興趣的戳 嵩天老師爬蟲課程。侵刪 六 正規表示式 編譯 將符合正規表示式語法的字串轉化為正規表示式特徵,只有在compile之...

Python爬蟲系列

部落格 python,爬蟲 由於近來學 lan 業 ai 繁 fa 忙 zuo 快乙個月沒有更新部落格了。這周完成了兩門課的結課考試,現下時間開始變得充裕。準備梳理一下前段時間學習的關於python爬蟲的內容,權當複習鞏固知識。而初次學習時遇到的疑難雜症,那時候的應對策略是抓大放下,在這梳理過程會下...