網站首頁 編程語言 正文
前言:
Python
的一大應用就是數據分析了,而數據分析中,經常碰到需要處理Excel
數據的情況。這里做一個Python處理Excel數據的總結,基本受用大部分情況。相信以后用Python
處理Excel數據不再是難事兒!
一.xlwt庫將數據導入Excel
1.將數據寫入一個Excel文件
wb = xlwt.Workbook() # 添加一個表 ws = wb.add_sheet('test') ? ? # 3個參數分別為行號,列號,和內容 # 需要注意的是行號和列號都是從0開始的 ws.write(0, 0, '第1列') ws.write(0, 1, '第2列') ws.write(0, 2, '第3列') ? # 保存excel文件 wb.save('./test.xls')
可以看到,用xlwt庫操作非常簡單,基本就三步走:
- 打開一個
Workbook
對象,并用add_sheet
方法添加一個表 - 然后就是用
write
方法寫入數據 - 最后用
save
方法保存
需要注意的是:xlwt庫里面所定義的行和列都是從0開始計數的
2.定制Excel表格樣式
表格樣式一般主要有這么幾塊內容:字體、對齊方式、邊框、背景色、寬度以及特殊內容,比如超鏈接、日期時間等。下面我們來分別看看用xlwt庫怎么定制這些樣式。
字體
xlwt庫支持的字體屬性也比較多,大概如下:
設置字體需要用到xlwt庫的XFStyle類和Font類,代碼模版如下:
style = xlwt.XFStyle() ? # 設置字體 font = xlwt.Font() # 比如設置字體加粗和下劃線 font.bold = True font.underline = True style.font = font ? # 然后應用 ws.write(2, 1, 'test', style)
后續幾個屬性的設置都是類似的,都是4步走:
- 拿到XFStyle
- 拿到對應需要的屬性,比如這里的Font對象
- 設置具體的屬性值
- 最后就是在write方法寫入數據的時候應用就行
3.元格對齊
先來看單元格對齊怎么設置:
# 單元格對齊 alignment = xlwt.Alignment() ? # 水平對齊方式和垂直對齊方式 alignment.horz = xlwt.Alignment.HORZ_CENTER alignment.vert = xlwt.Alignment.VERT_CENTER # 自動換行 alignment.wrap = 1 style.alignment = alignment ? # 然后應用 ws.write(2, 1, 'test', style)
上面這個自動換行的屬性還是蠻有用的,因為我們很多時候數據會比較長,最好再加上單元格的寬度屬性一起使用,這樣整體樣式會好很多
單元格寬度設置:
# 設置單元格寬度,也就是某一列的寬度 ws.col(0).width = 6666
4.單元格的背景色
背景色對應的屬性是 Pattern
# 背景色 pattern = xlwt.Pattern() pattern.pattern = xlwt.Pattern.SOLID_PATTERN ? # 背景色為黃色 # 0 = Black, 1 = White, 2 = Red, 3 = Green, 4 = Blue, 5 = Yellow, 6 = Magenta, # 7 = Cyan, 16 = Maroon, 17 = Dark Green, 18 = Dark Blue, 19 = Dark Yellow , # almost brown), 20 = Dark Magenta, 21 = Teal, 22 = Light Gray, 23 = Dark Gray # ... pattern.pattern_fore_colour = 5 style.pattern = pattern ? # 然后應用 ws.write(2, 1, 'test', style)
5.單元格邊框
邊框屬性是Borders
單元格邊框就2類:顏色和邊框線樣式
可以分別設置上下左右邊框的顏色和樣式:
# 邊框 borders = xlwt.Borders() ? # 邊框可以分別設置top、bottom、left、right # 每個邊框又可以分別設置顏色和線樣式:實線、虛線、無 # 顏色設置,其他類似 borders.left_colour = 0x40 # 設置虛線,其他類似 borders.bottom = xlwt.Borders.DASHED style.borders = borders ? # 然后應用 ws.write(2, 1, 'test', style)
特殊內容,比如超鏈接和公式
特殊內容一般主要會碰到這幾類:超鏈接、公式和時間日期
處理這些特殊內容需要用到Formula
# 超鏈接 link = 'HYPERLINK("http://www.baidu.com";"Baidu")' formula = xlwt.Formula(link) ws.write(2, 0, formula) ? # 公式也是類似 ws.write(1, 1, xlwt.Formula('SUM(A1,B1)')) ? # 時間 style.num_format_str = 'M/D/YY' ws.write(2, 1, datetime.datetime.now(), style)
以上就是用Python
將數據寫入到Excel的全部內容了,下面我們再來看看怎么讀取Excel中的數據做處理。
二、xlrd庫讀取Excel中的數據
1.讀取Excel文件
同樣的用xlrd庫讀取Excel的數據也是輕輕松松,先來看下實現代碼:
# 先打開一個文件 wb = xlrd.open_workbook(file_path) # 獲取第一個表 sheet1 = wb.sheet_by_index(0) ? # 總行數 nrows = sheet1.nrows # 總列數 ncols = sheet1.ncols ? # 后面就通過循環即可遍歷數據了 # 取數據 for i in range(nrows): ? ? for j in range(ncols): ? ? ? ? # cell_value方法取出第i行j列的數據 ? ? ? ? value = sheet1.cell_value(i, j) ? ? ? ? print(value)
總結一下,分為一下幾步:
首先通過xlrd庫的open_workbook
方法打開Excel文件
然后通過sheet_by_index
方法獲取表
然后分別獲取表的行數和列數,便于后面循環遍歷
根據列數和行數,循環遍歷,通過cell_value方法獲取每個單元格中的數據
2.工作表的相關操作
獲取一個工作表,有多種方式:
# 通過索引 sheet1 = wb.sheets()[0] sheet1 = wb.sheet_by_index(0) ? # 通過名字 sheet1 = wb.sheet_by_name('test') ? # 獲取所有表名 # sheet_names = wb.sheet_names()
獲取某一行或某一列的所有數據:
# 獲取行中所有數據,返回結果是一個列表 tabs = sheet1.row_values(rowx=0, start_colx=0, end_colx=None) # 返回一行一共有多少數據 len_value = sheet1.row_len(rowx=0)
row_values的三個參數分別是:行號、開始的列和結束的列,其中結束的列為None
表示獲取從開始列到最后的所有數據
類似的還有獲取某一列的數據:
cols = sheet1.col_values(colx=0, start_rowx=0, end_rowx=None)
3.處理時間數據
時間數據比較特殊,沒發直接通過上面的cell_value
方法獲取。需要先轉換為時間戳,然后再格式化成我們想要的格式。
比如要獲取Excel表格中,格式為2019/8/13 20:46:35的時間數據
# 獲取時間 time_value = sheet1.cell_value(3, 0) ? # 獲取時間戳 time_stamp = int(xlrd.xldate.xldate_as_datetime(time_value, 0).timestamp()) print(time_stamp) ? # 格式化日期 time_rel = time.strftime("%Y/%m/%d", time.localtime(time_stamp)) print(time_rel)
基本也是三步走:
- 通過
cell_value
方法獲取時間值 - 然后通過
xldate_as_datetime
方法獲取時間戳 - 然后格式化一下
Excel文件是用Python處理數據時常會碰到的一類場景,有了xlwt 和 xlrd的幫助可以非常快速的導入和導出Excel數據。
原文鏈接:https://blog.csdn.net/python2021_/article/details/122634643
相關推薦
- 2022-05-01 Python中的datetime包與time包包和模塊詳情_python
- 2022-05-31 Android實現文件資源管理器雛形_Android
- 2023-06-05 python中xlwt模塊的具體用法_python
- 2022-07-28 PyTorch實現手寫數字識別的示例代碼_python
- 2022-04-07 C++11新特性之列表初始化的具體使用_C 語言
- 2022-05-25 C++?自定義單向鏈表?ListNode詳情_C 語言
- 2024-01-29 Spring 的存儲和獲取Bean
- 2023-02-27 pandas?pd.cut()與pd.qcut()的具體實現_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支