利用Python如何將資料寫到CSV檔案中

2021-10-04 14:16:19 字數 2468 閱讀 1917

我們從網上爬取資料,最後一步會考慮如何儲存資料。如果資料量不大,往往不會選擇儲存到資料庫,而是選擇儲存到檔案中,例如文字檔案、csv 檔案、xls 檔案等。因為檔案具備攜帶方便、查閱直觀。

python 作為膠水語言,搞定這些當然不在話下。但在寫資料過程中,經常因資料來源中帶有中文漢字而報錯。最讓人頭皮發麻的編碼問題。

ascii 碼是美國在上個世紀 60 年代制定的一套字元編碼。主要是規範英語字元和二進位制位之間的關係。英語詞彙組成簡單,由 26 個字母構成。使用乙個位元組就能表示乙個字母符號。外加各種符號,使用 128 個字元就滿足編碼要求。

不同國家有不同語言文字。同時,文字組成部分的數量相比英語字母要多很多。根據不完全統計,漢字的數量大約將近 10 萬個,日常所使用的漢字有 3000 個。顯然,ascii 編碼無法滿足需求。所以漢字採用 gbk 編碼,使用兩個位元組表示乙個漢字。簡體中文的編碼方式是 gbk2312。

那 utf-8 又是什麼編碼?這要先說 unicode 了。unicode 目的是為了統一各種編碼。因為各國都各自的編碼方式。如果使用一種編碼編碼,使用另一種編碼解碼。這會造成出現亂碼的情況。但 unicode 只是乙個符號集,它只規定了符號的二進位制**,卻沒有規定這個二進位制**應該如何儲存。utf-8 就是在網際網路上使用最廣的一種 unicode 的實現方式。

因此,如果我們要寫資料到檔案中,最好指定編碼形式為 utf-8。

python 標準庫中,有個名為 csv 的庫,專門處理 csv 的讀寫操作。

# 讀取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)

具體使用例項如下:

import csv

import codecs

# codecs 是自然語言編碼轉換模組

filename = 'pythonbook.csv'

# 指定編碼為 utf-8, 避免寫 csv 檔案出現中文亂碼

with codecs.open(filename, 'w', 'utf-8') as csvfile:

# 指定 csv 檔案的頭部顯示項

filednames = ['書名', '作者']

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

books =

book =

writer.writeheader()

for book in books:

try:

writer.writerow()

except unicodeencodeerror:

print("編碼錯誤, 該資料無法寫到檔案中, 直接忽略該資料")

這種方式是逐行往 csv 檔案中寫資料, 所以效率會比較低。如果想批量將資料寫到 csv 檔案中,需要用到 pandas 庫。

pandas 是第三方庫,所以使用之前需要安裝。通過 pip 方式安裝是最簡單、最方便的。

pip install pandas

使用 pandas 批量寫資料的用法如下:

import pandas as pd

filename = 'pythonbook.csv'

number = 1

books =

book =

# 如果 book 條數足夠多的話,pandas 會每次往檔案中寫 50 條資料。

data = pd.dataframe(books)

# 寫入csv檔案,'a+'是追加模式

try:

if number == 1:

csv_headers = ['書名', '作者']

data.to_csv(filename, header=csv_headers, index=false, mode='a+', encoding='utf-8')

else:

data.to_csv('filename, header=false, index=false, mode='a+', encoding='utf-8')

number = number + 1

except unicodeencodeerror:

print("編碼錯誤, 該資料無法寫到檔案中, 直接忽略該資料")

原文出自:

如何將Unicode文字寫到日誌檔案中

有時為了定位問題,我們需要結合列印日誌來處理。特別是較難復現的,一般都需要檢視上下文日誌才能找出可能存在的問題。考慮到程式要在不同語言的作業系統上執行,程式介面顯示要支援unicode,列印出來的日誌也要支援unicode,即將執行日誌以unicode文字寫到日誌檔案中。那麼如何才能將unicode...

如何將Unicode文字寫到日誌檔案中

有時為了定位問題,我們需要結合列印日誌來處理。特別是較難復現的,一般都需要檢視上下文日誌才能找出可能存在的問題。考慮到程式要在不同語言的作業系統上執行,程式介面顯示要支援unicode,列印出來的日誌也要支援unicode,即將執行日誌以unicode文字寫到日誌檔案中。那麼如何才能將unicode...

如何將json資料轉換為python資料

json物件是j ascript object即j ascript中的物件,是一種通用的格式,格式嚴格,不支援備註。json文字和json物件的區別 python中我們一般提到json物件指的是字典 python的字典的格式和json格式,稍有不同 json 是資料儲存和交換文字資訊的語法 j as...