天天看點

Python常用的資料檔案存儲格式大全(2021最新/最全/最詳細版)

Python常用的資料檔案存儲格式大全(2021最新/最全/最詳細版)

詳解資料檔案存儲的各種方式,包括txt、json和csv以及excel格式,還有進行Excel資料寫入與讀取的第三方庫(xlrd/xlwt/pandas/openpyxl)

序言:儲存資料的方式各種各樣,最簡單的方式是直接儲存為文本檔案,如TXT、JSON、CSV等,除此之外Excel也是現在比較流行的存儲格式,通過這篇文章你也将掌握通過一些第三方庫(xlrd/xlwt/pandas/openpyxl)去操作Excel進行資料存儲與讀取,此一文足以!

TXT文本幾乎相容任何平台,但是不利于檢索,如果對檢索和資料結構要求不高,尋求友善的話,可以采用TXT文本存儲格式

open()方法第一個參數表示要儲存的目标檔案名稱,也可指定絕對路徑,第二個參數a表示以追加的方式寫入到文本,這樣前面寫入的内容就不會被覆寫,在爬蟲中一般使用的都是這種追加的方式。第三個參數指定檔案的編碼為utf-8,接着寫入資料,最後用close()方法來關閉檔案

上面的參數a表示每次寫入文本時不會清空之前寫入的資料,而是在文本末尾寫入新的資料,這是一種打開方式,還有其他打開檔案的方式:

r

以隻讀方式打開檔案

rb

以二進制隻讀方式打開一個檔案

r+

以讀寫方式打開一個檔案

rb+

以二進制讀寫方式打開一個檔案

w

以寫入方式打開檔案

wb

以二進制寫入方式打開一個檔案

w+

wb+

a

以追加方式打開一個檔案

ab

以二進制追加方式打開一個檔案

a+

ab+

 上面的b表示二進制,+表示以讀寫方式,r表示讀,w表示寫

用with as 文法來寫入資料,檔案會自動關閉,就不需要調用close()方法了,簡寫如下:

JSON,全稱為JavaScript Object Notation,也就是JavaScript對象标記,構造簡潔但是結構化程度非常高,采用對象和數組的組合來表示資料,是一種輕量級的資料交換格式,和XML有點類似,如果對資料結構有要求的話,可根據需求考慮此種方式

Python提供了json庫來實作對json檔案的讀寫操作,通過調用json庫的loads()方法可以将json文本字元串轉換為json對象,而調用dumps()方法可以将json對象轉換為文本字元串,如下:

indent代表縮進字元個數,ensure_ascii=False規定檔案輸出的編碼,這樣就可以輸出中文

注意:JSON的資料需要用雙引号來包圍,不能使用單引号,代碼如下:

如果我們想要把資料存儲為TXT格式,又想要把資料變為json這樣的結構,可以這樣實作:

CSV,全稱為Comma-Separated Values,中文名可以叫做字元分隔值或逗号分隔值,以純文字形式存儲表格資料,文本預設以逗号分隔,CSV相當于一個結構化表的純文字形式,比Excel檔案更加簡潔,儲存資料非常友善

 首先調用csv庫的writer()方法初始化寫入對象,然後再調用writerow()方法傳入每行的資料即可完成寫入

Excel效果如下:

Python常用的資料檔案存儲格式大全(2021最新/最全/最詳細版)

如果想修改列與列之間的分隔符,可以傳入參數delimiter,代碼如下:

這裡表示每一列資料以空格分隔

 調用writerows()方法就可以同時寫入多行,此時參數需要為二維清單,代碼如下:

 一般情況下,爬蟲提取的資料都是結構化資料,我們一般會用字典來表示,代碼如下:

 首先用fieldnames定義頭資訊,然後将其傳給DictWriter來初始化一個字典寫入對象,接着用writeheader()方法寫入頭資訊,最後調用writerow()方法傳入字典即可

如果想追加寫入的話,可将open()方法的第二個參數改為a,代碼如下:

我們可以将剛才寫入的檔案内容讀取出來,代碼如下:

 輸出結果如下:

Python常用的資料檔案存儲格式大全(2021最新/最全/最詳細版)

 通過周遊輸出每行内容,每一行都是一個清單形式

注意:如果CSV檔案中包含中文的話,還需要指定檔案編碼

當然也可以用pandas庫中的read_csv()方法将資料從CSV中讀取出來:

此種方式在做資料分析的時候用的比較多,也是一種比較友善讀取CVS檔案的方法

Excel檔案中包含了文本、數值、公式和格式等内容,而CSV不包含這些,預設打開編碼為Unicode,是現在比較流行的資料存儲格式

基本寫入方式

這裡我們調用xlwt庫進行Excel的資料寫入,代碼如下:

我們首先導入xlwt庫,然後調用Workbook()方法初始化一個可以操縱Excel表格的對象,并指定編碼格式為utf-8,接着再建立一個我們要寫入資料的指定表,用清單的形式建立二維數組,再用兩個for循環指定我們要添加資料的位置,這裡的i表示外層清單元素所在位置的序号,j表示裡層清單元素所在位置的序号,p和q分别表示外層清單和裡層清單的元素值,table.write(i,j,q)表示在第i行和第j列插入資料q,最後儲存Excel檔案。

運作效果如下:

Python常用的資料檔案存儲格式大全(2021最新/最全/最詳細版)

帶序号的寫入方式

代碼如下:

控制台輸出如下:

Python常用的資料檔案存儲格式大全(2021最新/最全/最詳細版)

 從上圖看,num就是一個帶有序号的清單,其值是data中的key,t是一個清單,并且它的第一個值也就是序号我們把它強制轉換成了整型,然後利用for循環周遊data中value的每個字段值,并把這些字段值依次添加到清單t中;因為後面我們要以二維數組的形式把資料插入到Excel中,才能定位插入的位置,是以需要再建構一個清單ldata,最後再把清單t添加到清單ldata中,這樣就構成了二維數組,後面的寫法和上面的第一種寫法一樣

Python常用的資料檔案存儲格式大全(2021最新/最全/最詳細版)

注意:由于xlwt支援的Excel版本相容問題,隻支援Excel 97-2003(*.xls),不支援Excel 2010(*.xlsx)和Excel 2016(*.xlsx)的,是以在儲存時字尾需為.xls,否則可能會有如下錯誤提示:

Python常用的資料檔案存儲格式大全(2021最新/最全/最詳細版)

這裡我們用剛剛寫入的資料demo.xls進行讀取,代碼如下:

首先調用xlrd的open_workbook()方法建立操縱Excel檔案的對象,然後通過sheet_by_index(index)方法或者sheet_by_name(sheet_name)方法根據索引、sheet名擷取sheet對象,然後擷取資料的總行數以及總列數,通過兩個for循環,調用sheet對象的cell_value(i, j)擷取單元格的值,強制轉換成字元串類型之後再根據索引添加到清單list中,以此構成二維數組,輸出并傳回,最後再周遊二維數組的每個元素(每個清單)進行輸出即可

Python常用的資料檔案存儲格式大全(2021最新/最全/最詳細版)

注意:xlrd支援對字尾為.xls以及.xlsx的Excel檔案的讀取;并且不論是xlwt還是xlrd,資料的起始索引位置都為0

pandas讀取

我們還是用上面的demo.xls進行操作:

我們看一下控制台輸出結果:

Python常用的資料檔案存儲格式大全(2021最新/最全/最詳細版)

我們可以觀察看,通過pandas庫的read_excel()方法,看起來好像更簡單,但它更偏向于資料分析,注意資料類型為DataFrame,輸出的資料中帶有序号

pandas寫入

Python常用的資料檔案存儲格式大全(2021最新/最全/最詳細版)

以pandas庫的DataFrame()方法存儲的資料都是帶有索引序号的,友善進行資料分析、模組化等

注意:pandas庫支援字尾為.xlsx的Excel表格

openpyxl寫入

Python常用的資料檔案存儲格式大全(2021最新/最全/最詳細版)

openpyxl讀取

Python常用的資料檔案存儲格式大全(2021最新/最全/最詳細版)

注意:openpyxl隻支援字尾為.xlsx的Excel檔案,并且讀取或寫入資料的索引位置均為1

個人推薦使用xlrd和xlwt以及pandas,這些庫操作Excel檔案時資料的起始索引位置都為0,比較友善,不過也可以根據個人使用習慣以及需求來決定

原創不易,如果覺得有點用,希望可以随手點個贊,拜謝各位老鐵!
作者:南柯樹下,Goal:讓程式設計更有趣! 原創微信公衆号:『小鴻星空科技』,專注于算法、爬蟲,網站,遊戲開發,資料分析、自然語言處理,AI等,期待你的關注,讓我們一起成長、一起Coding! 轉載說明:本文禁止抄襲、轉載 ,侵權必究!

 更多獨家精彩内容  請掃碼關注個人公衆号,我們一起成長,一起Coding,讓程式設計更有趣!

——  ——  ——  ——  —  END  ——  ——  ——  ——  ———— 

         歡迎掃碼關注我的公衆号

          小鴻星空科技

       

Python常用的資料檔案存儲格式大全(2021最新/最全/最詳細版)