我們從網上爬取資料,最後一步會考慮如何儲存資料。如果資料量不大,往往不會選擇儲存到資料庫,而是選擇儲存到檔案中,例如文字檔案、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...