之前在學習os模塊中,我們知道了如何創建一個txt格式的文件(具體操作見https://mp.csdn.net/postedit/80903024)
但是當我們爬取一些小說或一些圖片時,我們需要分類管理這些數據,這時候文件似乎無法直接描述出這些數據的關系,那么我們就需要創建一個Excel表格了
創建Excel表格一般有兩種方法:
一:通過導入xlwt庫來創建,這種是最常規的方法,不過相對也比較麻煩
二:通過導入csv庫來創建
接下來我們具體操作一下
一:使用xlwt庫
import xlwt
work_book=xlwt.Workbook(encoding='utf-8')
sheet=work_book.add_sheet('sheet表名')
sheet.write(0,0,'第一行第一列')
sheet.write(0,1,'第一行第二列')
work_book.save('Excel表.xls')
這種方法創建Excel表的過程很直觀,也很好理解,這里來逐行解釋一下
1 導入xlwt庫
2 創建工作表對象,並設置編碼格式為utf-8
3 添加一個sheet表,參數為sheet的表名
4 sheet.write()是寫入內容的方法
參數一:表示行數
參數二:表示列數
參數三:表示要寫入的內容
6 保存Excel表,注意表名后面要加.xls后綴
二、使用csv庫
csv全稱:comma sepreated value 逗號分割值
使用csv創建Excel表與os創建txt文件形式上差不多,因為使用csv的話系統會直接以Excel表的形式幫你保存數據
不需要你額外再創建Excel表
不過csv創建的Excel表格並不完全算是.xls文件,它與平常的.xls文件有以下幾種不同:
1.由於是純文本,所以所有的值均為字符串類型
2.無法進行字體操作和單元格操作,比如無法改變字體大小,顏色等,無法改變單元格的大小等
3.無法創建多個工作表
4.無法嵌入圖片
1.寫入數據
這里依舊先放代碼:
注意看rows和rows1的區別
按照rows1的寫法數據存入的時候會被修改,所以這種寫法雖然沒有語法錯誤,但實際執行的時候這種寫法是錯誤的
import csv
rows=[['張三',123,'abc'],['李四',456,'xyz'],['王五',789,'ij']]
rows1=['張三123','李四456','王五789']
csv文件在寫入的時候,默認每次寫入時會有一個空行作為分割,使用newline=''會把空行去掉
with open('test1.csv','w',newline='')as csv_file:
# 獲取一個csv對象進行內容寫入
writer=csv.writer(csv_file)
for row in rows:
# writerow 寫入一行數據
writer.writerow(row)
# 寫入多行
writer.writerows(rows)
writer1=csv.writer(csv_file)
for row1 in rows1:
writer1.writerow(row1)
輸出結果:
關於其中的代碼我解釋一下:
with open('test1.csv','w',newline='')as csv_file:
open():打開一個文件
test1.csv: 創建一個名字為test1的csv格式的文件,csv格式就是Excel表
'w' : 寫入內容 ,同樣的還有 'r':讀取內容 'a':追加寫入內容
newline='' :去掉空行 ,大家有空的話可以試試不寫newline=''的效果,這里就不演示了
writer.writerows(rows)
這行代碼是同時寫入多行,效果與逐行寫入一樣
2.讀取數據
以上面這個test1.csv文件為例:
with open('test1.csv','r')as read_file:
# 獲取一個csv對象進行內容讀取
reader=csv.reader(read_file)
print(reader)
print(list(reader))
輸出結果:
<_csv.reader object at 0x02156AB0>
[['張三', '123', 'abc'], ['李四', '456', 'xyz'], ['王五', '789', 'ij'], ['張三', '123', 'abc'], ['李四', '456', 'xyz'], ['王五', '789', 'ij'], ['張', '三', '1', '2', '3'], ['李', '四', '4', '5', '6'], ['王', '五', '7', '8', '9']]
注意:如果直接打印reader的話,會顯示一個地址
因為結果最外層是list形式,所以要把reader轉換成list類型
DictWriter 和 DictReader
DictWriter:寫入字典類型的數據
headers=['name','age']
data_dic=[{'name':'一','age':'15'},{'name':'二','age':'25'}]
with open('dict.csv','w',newline='')as csv_file:
# 寫入一個字典到csv(excel)中,fieldnames設置excel的表頭
writer=csv.DictWriter(csv_file,fieldnames=headers)
# 開始寫入標題
writer.writeheader()
for dict in data_dic:
writer.writerow(dict)
print(dict)
writer.writerows(data_dic)
寫法多了一行寫入標題,創建writer的時候多了一個參數,其余並沒有多大區別
DictReader:讀取字典類型的數據
with open('dict.csv','r')as csv_file:
reader=csv.DictReader(csv_file)
print(list(reader))
輸出結果:
[OrderedDict([('name', '一'), ('age', '15')]), OrderedDict([('name', '二'), ('age', '25')])]
這里的結果並不是常規的字典格式
這就是python中創建Excel表的兩種方法,小伙伴們學會了嗎?