python對excel操作簡書_Python讀寫Excel表格,就是這么簡單粗暴又好用

最近在做一些數據處理和計算的工作,因為數據是以.CSV格式保存的,因此剛開始直接用Excel來處理。

但是做著做著發現重復的勞動,其實并沒有多大的意義,于是就想著寫個小工具幫著處理。

以前正好在一本書上看到過,使用Python來處理Excel表格,可惜沒有仔細看。

于是我到處查找資料,基本解決了日常所需,終于算是完成了任務,因此撰寫此文就算是總結吧,主要記錄使用過程的常見問題及解決。

Python操作Excel,主要用到xlrd和xlwt這兩個庫,即xlrd是讀Excel,xlwt是寫Excel的庫。

可從這里下載https://pypi.python.org/pypi。下面分別記錄Python讀和寫Excel。

Python寫Excel——xlwt

Python寫Excel的難點,不在構造一個Workbook的本身,而是填充的數據,不過這不在范圍內。

在寫Excel的操作中,也有棘手的問題,比如寫入合并的單元格,就是比較麻煩的,另外寫入還有不同的樣式。

詳細代碼如下:

importxlwt

#設置表格樣式

def?set_style(name,height,bold=False):

style?=?xlwt.XFStyle()

font?=?xlwt.Font()

font.name?=?name

font.bold?=?bold

font.color_index?=?4

font.height?=?height

style.font?=?font

return?style

#寫Excel

def?write_excel():

f?=?xlwt.Workbook()

sheet1?=?f.add_sheet('學生',cell_overwrite_ok=True)

row0?=?["姓名","年齡","出生日期","愛好"]

colum0?=?["張三","李四","戀習Python","小明","小紅","無名"]

#寫第一行

for?i?in?range(0,len(row0)):

sheet1.write(0,i,row0[i],set_style('Times?New?Roman',220,True))

#寫第一列

for?i?in?range(0,len(colum0)):

sheet1.write(i+1,0,colum0[i],set_style('Times?New?Roman',220,True))

sheet1.write(1,3,'2006/12/12')

sheet1.write_merge(6,6,1,3,'未知')#合并行單元格

sheet1.write_merge(1,2,3,3,'打游戲')#合并列單元格

sheet1.write_merge(4,5,3,3,'打籃球')

f.save('test.xls')

if?__name__?==?'__main__':

write_excel()

結果圖:

7522e3f5812d

在此,對write_merge()的用法稍作解釋,如上述:sheet1.write_merge(1,2,3,3,'打游戲'),即在四列合并第2,3列,合并后的單元格內容為"合計",并設置了style。其中,里面所有的參數都是以0開始計算的。

Python讀Excel——xlrd

Python讀取Excel表格,相比xlwt來說,xlrd提供的接口比較多,但過程也有幾個比較麻煩的問題,比如讀取日期、讀合并單元格內容。

7522e3f5812d

下面先看看基本的操作:

7522e3f5812d

(圖表數據)

整體思路為,打開文件,選定表格,讀取行列內容,讀取表格內數據

詳細代碼如下:

importxlrd

fromdatetimeimportdate,datetime

file?='test3.xlsx'

def?read_excel():

wb?=?xlrd.open_workbook(filename=file)#打開文件

print(wb.sheet_names())#獲取所有表格名字

sheet1?=?wb.sheet_by_index(0)#通過索引獲取表格

sheet2?=?wb.sheet_by_name('年級')#通過名字獲取表格

print(sheet1,sheet2)

print(sheet1.name,sheet1.nrows,sheet1.ncols)

rows?=?sheet1.row_values(2)#獲取行內容

cols?=?sheet1.col_values(3)#獲取列內容

print(rows)

print(cols)

print(sheet1.cell(1,0).value)#獲取表格里的內容,三種方式

print(sheet1.cell_value(1,0))

print(sheet1.row(1)[0].value)

運行結果如下:

7522e3f5812d

那么問題來了,上面的運行結果中紅框框中的字段明明是出生日期,可顯示的確實浮點數;同時合并單元格里面應該是有內容的,結果不能為空。

別急,我們來一一解決這兩個問題:

1.Python讀取Excel中單元格內容為日期的方式

Python讀取Excel中單元格的內容返回的有5種類型,即上面例子中的ctype:

ctype : ?0 empty,1 string,2 number, 3 date,4 boolean,5 error

即date的ctype=3,這時需要使用xlrd的xldate_as_tuple來處理為date格式,先判斷表格的ctype=3時xldate才能開始操作。

詳細代碼如下:

importxlrd

fromdatetimeimportdate,datetime

print(sheet1.cell(1,2).ctype)

date_value?=?xlrd.xldate_as_tuple(sheet1.cell_value(1,2),wb.datemode)

print(date_value)

print(date(*date_value[:3]))

print(date(*date_value[:3]).strftime('%Y/%m/%d'))

運行結果如下:

7522e3f5812d

2.獲取合并單元格的內容

在操作之前,先介紹一下merged_cells()用法,merged_cells返回的這四個參數的含義是:(row,row_range,col,col_range),其中[row,row_range)包括row,不包括row_range,col也是一樣,即(1, 3, 4, 5)的含義是:第1到2行(不包括3)合并,(7, 8, 2, 5)的含義是:第2到4列合并。

詳細代碼如下:

print(sheet1.merged_cells)

print(sheet1.cell_value(1,3))

print(sheet1.cell_value(4,3))

print(sheet1.cell_value(6,1))

運行結果如下:

7522e3f5812d

發現規律了沒?是的,獲取merge_cells返回的row和col低位的索引即可!?于是可以這樣批量獲取:

詳細代碼如下:

merge=?[]

print(sheet1.merged_cells)

for(rlow,rhigh,clow,chigh)insheet1.merged_cells:

merge.append([rlow,clow])

forindexinmerge:

print(sheet1.cell_value(index[0],index[1]))

運行結果跟上圖一樣,如下:

7522e3f5812d

Python讀寫Excel表格,就是這么簡單粗暴又好用,如果覺得不錯,對你工作中有幫助,動動手指分享給更多人哦。

好了,本文就給大伙分享到這里,文末分享一波福利

7522e3f5812d

7522e3f5812d

獲取方式:加python群 839383765 即可獲取!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/258907.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258907.shtml
英文地址,請注明出處:http://en.pswp.cn/news/258907.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

九度 1470 調整方陣

題目描述&#xff1a; 輸入一個N&#xff08;N<10&#xff09;階方陣&#xff0c;按照如下方式調整方陣&#xff1a;1.將第一列中最大數所在的行與第一行對調。2.將第二列中從第二行到第N行最大數所在的行與第二行對調。依此類推...N-1.將第N-1列中從第N-1行到第N行最大數所…

halcon/c++接口基礎 之 halcon初認識

從今天開始&#xff0c;開始更新博客&#xff0c;主要分享自己最近正在翻譯的Halcon/C教程。先給出第一篇文章&#xff0c;由于此文章&#xff0c;是用latex寫的&#xff0c;直接導成html&#xff0c;保存在七牛云存儲上&#xff0c;所以直接點擊鏈接就看到&#xff0c;后面我將…

指數型組織形成的 9 大驅動因素

指數時代&#xff0c;是一個前所未有的激動人心的世界。 Airbnb, 谷歌, 亞馬遜和GitHub這些知名的公司&#xff0c;都有一個讓人稱羨的共同點&#xff0c;那就是——他們都是非常成功的指數型組織&#xff08;Exponential Organizations&#xff0c;ExO’s&#xff09;。 “在當…

Java for LeetCode 061 Rotate List

Given a list, rotate the list to the right by k places, where k is non-negative. For example: Given 1->2->3->4->5->NULL and k 2, return 4->5->1->2->3->NULL. 解題思路&#xff1a; 只需找到對應的位置&#xff0c;然后指向head&…

mysqld:表mysql.plugin不存在_99%測試工程師不知道的數據庫知識|干貨

點擊上方“藍字”關注我們數據庫&#xff0c;簡而言之可視為電子化的文件柜——存儲電子文件的處所&#xff0c;用戶可以對文件中的數據進行新增、查詢、更新、刪除等操作。所謂“數據庫”是以一定方式儲存在一起、能與多個用戶共享、具有盡可能小的冗余度、與應用程序彼此獨立…

Windows Phone 執行模型概述

Windows Phone 執行模型控制在 Windows Phone 上運行的應用程序的生命周期&#xff0c;該過程從啟動應用程序開始&#xff0c;直至應用程序終止。 該執行模型旨在始終為最終用戶提供快速響應的體驗。為此&#xff0c;在任何給定時間內&#xff0c;Windows Phone 僅允許一個應用…

halcon/c++接口基礎 之 構造函數與Halcon算子

Halcon/C提供了構造函數&#xff0c;主要基于適合的Halcon算子。比如說HImage和HBarCode基于read_image and create_bar_code_model。 請注意當前的Halcon版本針對不同的算子構造函數的功能不同。如下我們介紹了一些最常用的Halcon算子&#xff0c;而一個完整的構造函數列表可…

Android Wifi簡單的梳理【轉】

本文轉載自&#xff1a;http://blog.csdn.net/gabbzang/article/details/10005411 代表一個已經配置過的網絡。包含網絡ID(networkId)、該網絡ID代表的網絡的BSSID和SSID、加密機制、密碼等信息。 WifiInfo&#xff1a; 代表一個正在建立或者已經建立的網絡連接。該網絡的BSSID…

fenby C語言 P30

int a[5]&#xff0c;*pa; int a[5],*p&a[0]; #include <stdio.h> int main(void){ int a[5],*pa,i; for(i0;i<5;i) { *p1; p; }pp-5;for(i0;i<5;i,p)printf("%d\n",*p);return 0;}轉載于:https://www.cnblogs.com/amiaojiang/p/4507114.html

bat自動輸入用戶名和密碼_「小白到大牛之路6」交換機后臺管理之重復輸入用戶名和密碼...

項目需求解決項目5中存在的問題&#xff1a;用戶名和密碼只能輸入一次。如果輸入錯誤&#xff0c;就沒有機會重新輸入。項目實現#include int main(void) {// 定義變量&#xff0c;用來表示用戶名和密碼char name[32];char password[16];//輸入用戶名和密碼while (1) {// 輸入用…

并行計算簡介

轉自&#xff1a;http://www.cnblogs.com/wasd/archive/2009/04/07/1430859.html 并行計算簡介 作者&#xff1a; Blaise Barney, 勞倫斯利弗莫爾國家實驗室 譯者&#xff1a;盧洋&#xff0c;同濟大學&#xff0c;2009年4月 原文地址&#xff1a;https://computing.llnl.gov/t…

開場 Live,分享點干貨——「深入了解 Node.js 包與模塊機制」

先放上 Live 地址&#xff1a; www.zhihu.com/lives/84274… 本次 Live 將深入剖析 Node.js 包與模塊機制&#xff0c;包括且不限于解析 Node.js 源碼、社區規范等。本人認為這是作為一個合格 Node.js 開發者哪怕是不深入也要了解的姿勢之一。 本次 Live 主要包括以下內容&…

halcon/c++接口基礎 之 析構函數和Halcon算子

所有的HALCON/C類都提供了默認的析構函數用來自動銷毀對應的內存。對于某些類&#xff0c;析構函數基于適合的算子&#xff1a; Windows: HWindow類的析構函數基于close_window關閉窗口。注意&#xff1a;算子本身不是析構器。你可以選擇調用CloseWindow關閉窗口&#xff0c;…

140字

跑男他們這一組做的游戲&#xff0c;首先按任務來 他們做的技術難度很高感覺。需要在android里面用flash我自己從來沒有接觸過。而且制作的難度也很大&#xff0c;反正就目前難度系數來說的話&#xff0c;可以秒殺我的DB天氣了。然后就是吐槽的也是我最不能忍的就是美化方面做得…

ios 上傳圖片到阿里云的oss_JEECG BOOT 上傳如何同時支持阿里OSS、Minio、本地存儲

Jeecg-Boot 提供了文件及圖片上傳功能&#xff0c;前兩個文件已介紹了MinIO和OSS配置&#xff0c;現在可根據需要選擇上傳方式。文件上傳接口(圖片/文件)在yml文件中可切換圖片/文件存儲方式訪問路徑上送參數說明在yml文件中可切換圖片/文件存儲方式local為本地存儲minio為使用…

halcon/c++接口基礎 之內存管理

所有的HALCON類&#xff0c;不僅僅HImage,HRegion,HTuple&#xff0c;HFramegrabber等等&#xff0c;還有面向過程的方法中使用的Hobject&#xff0c;都可以使用默認的析構器自動釋放內存。 &#xff08; see also section 2.4 “Destructors and Halcon Operators”)&#xf…

tomcat 禁用access.log

修改 server.xml 注釋掉,如: <!-- Access log processes all example.Documentation at: /docs/config/valve.htmlNote: The pattern used is equivalent to using pattern"common"<Valve className"org.apache.catalina.valves.AccessLogValve" dir…

bzoj 3505

3505: [Cqoi2014]數三角形 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 698 Solved: 424[Submit][Status][Discuss]Description 給定一個nxm的網格&#xff0c;請計算三點都在格點上的三角形共有多少個。下圖為4x4的網格上的一個三角形。 注意三角形的三點不能共線。 In…

python時間格式_python 格式化日期

常用的時間函數如下 獲取當前日期&#xff1a;time.time() 獲取元組形式的時間戳&#xff1a;time.local(time.time()) 格式化日期的函數(基于元組的形式進行格式化)&#xff1a; &#xff08;1&#xff09;time.asctime(time.local(time.time())) &#xff08;2&#xff09;ti…

halcon/c++接口基礎 之異常處理

關于運行錯誤&#xff0c;HALCON/C默認打印錯誤信息并且終止程序。然而在某些應用中&#xff0c;放寬這個法則可能更有用。比如&#xff0c;如果一個應用要求用戶交互式地指定一個圖像文件讀取&#xff0c;如果因為用戶不能拼錯文件名而終止程序的話&#xff0c;會很不方便。因…