表格講解
表格格式
很多人學習python,不知道從何學起,
很多人學習python,掌握了基本語法過后,不知道在哪里尋找案例上手,
很多已經做案例的人,卻不知道如何去學習更加高深的知識,
那么針對這三類人,我給大家提供一個好的學習平臺,免費領取視頻教程,電子書籍,以及課程的源代碼!
QQ群:961562169
表格分為:作業簿,作業表,單元格
如圖:整個檔案就是一個作業簿,下面的 zhengjiang_power 和sheet1為作業表,
xlrd +xlwt讀寫表格
因為電腦右鍵新建的表格都是xls 和xlsx格式,
所以講解xls 和xlsx的操作,
csv python 里有專門的包,csv或者pandas
pandas常用函式,個人常用的
xlrd 讀表格
引數大全
import xlrd
data = https://www.cnblogs.com/41280a/archive/2020/10/06/xlrd.open_workbook(filename)#檔案名以及路徑,如果路徑或者檔案名有中文給前面加一個r,
table = data.sheets()[0] #通過索引順序獲取
table = data.sheet_by_index(sheet_indx)) #通過索引順序獲取
table = data.sheet_by_name(sheet_name)#通過名稱獲取
以上三個函式都會回傳一個xlrd.sheet.Sheet()物件
names = data.sheet_names() #回傳book中所有作業表的名字
data.sheet_loaded(sheet_name or indx) # 檢查某個sheet是否匯入完畢
行的操作
nrows = table.nrows #獲取該sheet中的有效行數
table.row(rowx) #回傳由該行中所有的單元格物件組成的串列
table.row_slice(rowx) #回傳由該列中所有的單元格物件組成的串列
table.row_types(rowx, start_colx=0, end_colx=None) #回傳由該行中所有單元格的資料型別組成的串列
table.row_values(rowx, start_colx=0, end_colx=None) #回傳由該行中所有單元格的資料組成的串列
table.row_len(rowx) #回傳該列的有效單元格長度
列的操作
ncols = table.ncols #獲取串列的有效列數
table.col(colx, start_rowx=0, end_rowx=None) #回傳由該列中所有的單元格物件組成的串列
table.col_slice(colx, start_rowx=0, end_rowx=None) #回傳由該列中所有的單元格物件組成的串列
table.col_types(colx, start_rowx=0, end_rowx=None) #回傳由該列中所有單元格的資料型別組成的串列
table.col_values(colx, start_rowx=0, end_rowx=None) #回傳由該列中所有單元格的資料組成的串列
單元格操作
table.cell(rowx,colx) #回傳單元格物件
table.cell_type(rowx,colx) #回傳單元格中的資料型別
table.cell_value(rowx,colx) #回傳單元格中的資料
table.cell_xf_index(rowx, colx) # 暫時還沒有搞懂
import xlrd
#打開作業簿
xlsx=xlrd.open_workbook("zhenjiang_power.xlsx")
#使用索引打開作業表
table=xlsx.sheet_by_index(0)
#使用名稱打開作業表
#table=xlsx.sheet_by_name('zhenjiang_power')
#查看單元格值
print(table.cell_value(0,0))#第一個單元格值
print(table.cell(0,0).value)
print(table.row(0)[0].value)
大檔案讀取有些慢,
遍歷全部資料
#遍歷全部資料
row =table.nrows#總行數
for i in range(row):
rowdate =table.row_values(i)#i行的list
for a,b in enumerate(rowdate):
print(i,a,b)#第i行,a列,資料b
xlwt 寫表格
import xlwt
#新建一個作業薄
new_workbook=xlwt.Workbook()
#新建一個作業表
worksheet=new_workbook.add_sheet('new_sheet')
#寫入內容
worksheet.write(0,0,'你好美')
#保存
new_workbook.save(r"C:\Users\Shineion\Desktop\test.xls")
打開寫的檔案
用神奇的 xlutils 套用 Excel 格式
首先下載xlutils
準備好一個Excel模板
模板必須為xls格式,xlsx不兼容
# -*- coding: utf-8 -*- from xlutils.copy import copy #把Excel中的模板復制過來 import xlrd import xlwt tem_excel=xlrd.open_workbook(r"C:\Users\Shineion\Desktop\樣例.xls",formatting_info=True) #formatting_info=True保留格式打開檔案,formatting_info讀取xlsx報錯,錯誤資訊NotImplementedError: formatting_info=True not yet implemented tem_sheet=tem_excel.sheet_by_index(0) new_excel=copy(tem_excel)#復制表格 new_sheet=new_excel.get_sheet(0) new_sheet.write(2,1,12) new_sheet.write(3,1,13) new_sheet.write(4,1,14) new_excel.save(r'C:\Users\Shineion\Desktop\樣例測驗.xls')
絕對路徑前面要加一個r
結果:
可以發現寫入的12,13,14和原始表格樣式一樣,
接下來,我們新建自己的樣式
# -*- coding: utf-8 -*- from xlutils.copy import copy #把Excel中的模板復制過來 import xlrd import xlwt tem_excel=xlrd.open_workbook(r"C:\Users\Shineion\Desktop\樣例.xls",formatting_info=True) #formatting_info=True保留格式打開檔案,formatting_info讀取xlsx報錯,錯誤資訊NotImplementedError: formatting_info=True not yet implemented tem_sheet=tem_excel.sheet_by_index(0) new_excel=copy(tem_excel)#復制表格 new_sheet=new_excel.get_sheet(0) #新建一個樣式 style=xlwt.XFStyle()#初始化樣式 #字體設定 font=xlwt.Font()#初始化字體 font.name="微軟雅黑"#字體 font.bold=True# 加粗 font.height=360 #計算公式=幾號字體*20 如18號字體的height=360 style.font=font #把font添加進樣式 #邊框設定 borders=xlwt.Borders()#初始化邊框 borders.top=xlwt.Borders.THIN#上邊框 THIN細線框,還有其他線框 borders.bottom=xlwt.Borders.THIN borders.left=xlwt.Borders.THIN borders.right=xlwt.Borders.THIN style.borders=borders#把邊框添加進樣式 #對齊 aligment=xlwt.Alignment()#對齊 aligment.horz=xlwt.Alignment.HORZ_CENTER#horz水平對齊方式 ,HORZ_CENTER 中心對齊通過改HORZ_CENTER中的center部分設定其他對齊方式 aligment.vert=xlwt.Alignment.VERT_CENTER#vert垂直對齊,VERT_CENTER垂直中心對齊,通過修改center部分設定其他對齊方式 style.alignment=aligment new_sheet.write(2,1,12,style)#style帶格式寫入 new_sheet.write(3,1,13,style) new_sheet.write(4,1,14,style) new_excel.save(r'C:\Users\Shineion\Desktop\樣例測驗.xls')
報表生成
關于報表相關的,還是學習用pandas ,比xlwt,xlrd好用
英文官網:pandas
個人資源:
pandas常用函式,個人常用的
個人資源鏈接介紹很全的,
用 xlsxwriter ,openpyxl 更靈活操作 Excel
新的寫入方式xlsxwriter
# -*- coding: utf-8 -*-
import xlwt
workbook=xlwt.Workbook()
sheet0=workbook.add_sheet('sheet0')
for i in range(300):
sheet0.write(0,i,i)
workbook.save('測驗.xls')
顯示錯誤資訊:
ValueError: column index (256) not an int in range(256)
xlwt不支持超過256列
為了避免這個問題,使用xlsxwriter,
# -*- coding: utf-8 -*-
import xlsxwriter as xw
workbook=xw.Workbook(r'C:\Users\Shineion\Desktop\樣例1.xls')#指定存的位置,新建作業薄
sheet0=workbook.add_worksheet('sheet0')#新建一個作業表
for i in range(300):
sheet0.write(0,i,i)
workbook.close()
運行成功
和xlwt還是有些區別的,
一個打開作業薄是否需要指定路徑,
一個add_worksheet,和add_sheet
一個最后需要保持,一個直接close
新的追加寫入方式openpyxl
# -*- coding: utf-8 -*- import openpyxl workbook=openpyxl.load_workbook(r'C:\Users\Shineion\Desktop\測驗.xlsx')#打開已有作業薄,openpyxl不支持舊版本的xls,會報錯 sheet0=workbook['Sheet1'] #寫入資料 sheet0['B4']='總裁余' #B列第4行 sheet0['B5']=6 workbook.save(r'C:\Users\Shineion\Desktop\測驗1.xlsx')
結果:
openpyxl,xlsxwriter 和前面xlwt.xlrd區別不支持帶格式寫入,
應用案例:把某個檔案夾下的所有檔案名寫入表格,用于查找檔案
# -*- coding: utf-8 -*-
import os
import xlwt
file_dir="d:/"#查找d盤
workbook=xlwt.Workbook()
sheet0=workbook.add_sheet('sheet0')
n=0
for i in os.listdir(file_dir):
sheet0.write(n,0,i)
n+=1
workbook.save(r'C:\Users\Shineion\Desktop\測驗1.xlsx')
excel篇 介紹完啦,
pandas 和xlwt,xlrd 要聯合使用,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/159494.html
標籤:其他
