Python3爬蟲中CSV文件存儲的方法?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名與空間、網頁空間、營銷軟件、網站建設、華寧網站維護、網站推廣。
CSV,全稱為Comma-Separated Values,中文可以叫作逗號分隔值或字符分隔值,其文件以純文本形式存儲表格數據。該文件是一個字符序列,可以由任意數目的記錄組成,記錄間以某種換行符分隔。每條記錄由字段組成,字段間的分隔符是其他字符或字符串,最常見的是逗號或制表符。不過所有記錄都有完全相同的字段序列,相當于一個結構化表的純文本形式。它比Excel文件更加簡介,XLS文本是電子表格,它包含了文本、數值、公式和格式等內容,而CSV中不包含這些內容,就是特定字符分隔的純文本,結構簡單清晰。所以,有時候用CSV來保存數據是比較方便的。本節中,我們來講解Python讀取和寫入CSV文件的過程。
1. 寫入
這里先看一個最簡單的例子:
import csv with open('data.csv', 'w') as csvfile: writer = csv.writer(csvfile) writer.writerow(['id', 'name', 'age']) writer.writerow(['10001', 'Mike', 20]) writer.writerow(['10002', 'Bob', 22]) writer.writerow(['10003', 'Jordan', 21])
首先,打開data.csv文件,然后指定打開的模式為w(即寫入),獲得文件句柄,隨后調用csv庫的writer()方法初始化寫入對象,傳入該句柄,然后調用writerow()方法傳入每行的數據即可完成寫入。
運行結束后,會生成一個名為data.csv的文件,此時數據就成功寫入了。直接以文本形式打開的話,其內容如下:
id,name,age 10001,Mike,20 10002,Bob,22 10003,Jordan,21
可以看到,寫入的文本默認以逗號分隔,調用一次writerow()方法即可寫入一行數據。用Excel打開的結果如圖5-6所示。
如果想修改列與列之間的分隔符,可以傳入delimiter參數,其代碼如下:
import csv with open('data.csv', 'w') as csvfile: writer = csv.writer(csvfile, delimiter=' ') writer.writerow(['id', 'name', 'age']) writer.writerow(['10001', 'Mike', 20]) writer.writerow(['10002', 'Bob', 22]) writer.writerow(['10003', 'Jordan', 21])
這里在初始化寫入對象時傳入delimiter為空格,此時輸出結果的每一列就是以空格分隔了,內容如下:
id name age 10001 Mike 20 10002 Bob 22 10003 Jordan 21
另外,我們也可以調用writerows()方法同時寫入多行,此時參數就需要為二維列表,例如:
import csv with open('data.csv', 'w') as csvfile: writer = csv.writer(csvfile) writer.writerow(['id', 'name', 'age']) writer.writerows([['10001', 'Mike', 20], ['10002', 'Bob', 22], ['10003', 'Jordan', 21]])
輸出效果是相同的,內容如下:
id,name,age 10001,Mike,20 10002,Bob,22 10003,Jordan,21
但是一般情況下,爬蟲爬取的都是結構化數據,我們一般會用字典來表示。在csv庫中也提供了字典的寫入方式,示例如下:
import csv with open('data.csv', 'w') as csvfile: fieldnames = ['id', 'name', 'age'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() writer.writerow({'id': '10001', 'name': 'Mike', 'age': 20}) writer.writerow({'id': '10002', 'name': 'Bob', 'age': 22}) writer.writerow({'id': '10003', 'name': 'Jordan', 'age': 21})
這里先定義3個字段,用fieldnames表示,然后將其傳給DictWriter來初始化一個字典寫入對象,接著可以調用writeheader()方法先寫入頭信息,然后再調用writerow()方法傳入相應字典即可。最終寫入的結果是完全相同的,內容如下:
id,name,age 10001,Mike,20 10002,Bob,22 10003,Jordan,21
這樣就可以完成字典到CSV文件的寫入了。
另外,如果想追加寫入的話,可以修改文件的打開模式,即將open()函數的第二個參數改成a,代碼如下:
import csv with open('data.csv', 'a') as csvfile: fieldnames = ['id', 'name', 'age'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writerow({'id': '10004', 'name': 'Durant', 'age': 22})
這樣在上面的基礎上再執行這段代碼,文件內容便會變成:
id,name,age 10001,Mike,20 10002,Bob,22 10003,Jordan,21 10004,Durant,22
可見,數據被追加寫入到文件中。
如果要寫入中文內容的話,可能會遇到字符編碼的問題,此時需要給open()參數指定編碼格式。比如,這里再寫入一行包含中文的數據,代碼需要改寫如下:
import csv with open('data.csv', 'a', encoding='utf-8') as csvfile: fieldnames = ['id', 'name', 'age'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writerow({'id': '10005', 'name': '王偉', 'age': 22})
這里需要給open()函數指定編碼,否則可能發生編碼錯誤。
另外,如果接觸過pandas等庫的話,可以調用DataFrame對象的to_csv()方法來將數據寫入CSV文件中。
2. 讀取
我們同樣可以使用csv庫來讀取CSV文件。例如,將剛才寫入的文件內容讀取出來,相關代碼如下:
import csv with open('data.csv', 'r', encoding='utf-8') as csvfile: reader = csv.reader(csvfile) for row in reader: print(row)
運行結果如下:
['id', 'name', 'age'] ['10001', 'Mike', '20'] ['10002', 'Bob', '22'] ['10003', 'Jordan', '21'] ['10004', 'Durant', '22'] ['10005', '王偉', '22']
這里我們構造的是Reader對象,通過遍歷輸出了每行的內容,每一行都是一個列表形式。注意,如果CSV文件中包含中文的話,還需要指定文件編碼。
另外,如果接觸過pandas的話,可以利用read_csv()方法將數據從CSV中讀取出來,例如:
import pandas as pd df = pd.read_csv('data.csv') print(df)
運行結果如下:
id name age 0 10001 Mike 20 1 10002 Bob 22 2 10003 Jordan 21 3 10004 Durant 22 4 10005 王偉 22
在做數據分析的時候,此種方法用得比較多,也是一種比較方便地讀取CSV文件的方法。
感謝各位的閱讀!看完上述內容,你們對Python3爬蟲中CSV文件存儲的方法大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注創新互聯行業資訊頻道。
網站題目:Python3爬蟲中CSV文件存儲的方法
網頁路徑:http://vcdvsql.cn/article32/pehppc.html
成都網站建設公司_創新互聯,為您提供營銷型網站建設、ChatGPT、服務器托管、品牌網站制作、電子商務、標簽優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯