python讀寫excel檔案簡單應用
本文主要技術要點:
- 使用xlrd讀取excel檔案
- 使用xlwd寫入excel檔案
- excel檔案中時間元素的簡單計算
1.題目要求
根據如下名為時刻表.xlsx
的檔案計算每種路線需要的時間,並將結果寫入新檔案:
2.環境配置
安裝需要用到的xlrd和xlwd庫:
$ pip install xlrd xlwt
3.讀取excel檔案
讀取檔案首先需要開啟檔案物件,使用xlrd.open_workbook()函式開啟檔案,該函式返回獲取的檔案物件。因為excel檔案由表組成,我們還需要找到對應的表格才能對錶中的元素進行操作,所以需要通過剛才獲得的檔案物件用成員函式sheet_by_index()找到對應的表,因為檔案中只有一個表,所以下標是0,程式碼如下:
workbook=xlrd.open_workbook('./時刻表.xlsx')
booksheet=workbook.sheet_by_index(0)
根據所需要的“出發時間”和“到達時間”兩列的列號是3和5,我們可以這樣獲得由這兩列元素組成的列表:
col_leave=booksheet.col_values(3)
col_arrive=booksheet.col_values(5)
我們也可以根據“出發時間”和“到達時間”兩個欄位自動找到兩列的列號。具體做法是通過讀取第二行元素,獲得一個包含這兩個欄位的列表,但是如果通過遍歷一次列表找到兩個下標的方法並不優雅,我們就想到可以建立一個列表元素到列表下標的對映,然後再通過兩個欄位直接找到下標:
row_dict=dict(map(reversed,enumerate(booksheet.row_values(1))))
col_leave=booksheet.col_values(row_dict["出發時間"])
col_arrive=booksheet.col_values(row_dict["到達時間"])
4.計算時間差並列印
因為這裡時間元素的格式是excel中自定義的時間格式,我們需要通過xlrd.xldate.xldate_as_datetime函式返回時間物件,通過seconds成員返回該時間以秒為單位的值,通過步驟3中兩個列表對應元素的差生成列表:
col_result=[(xlrd.xldate.xldate_as_datetime(col_arrive[i],0)-\
xlrd.xldate.xldate_as_datetime(col_leave[i],0)).seconds/3600 for i in range(2,colNumber)]
注意列表中前兩個元素是表頭,不是時間值。
5.將結果寫入excel新檔案
類似之前讀取檔案,我們用下面的程式碼獲得檔案物件進行寫入:
new_workbook=xlwt.Workbook()
sheet1=new_workbook.add_sheet('result',cell_overwrite_ok=True)
這裡cell_overwrite_ok引數相當於open函式裡面的開啟方式是否是’w’,我們選擇True,也就是覆蓋寫的方式,每次開啟檔案的寫入操作都會覆蓋之前的結果。
接下來通過兩層迴圈和sheet.write()函式向表格寫入元素:
for i in range(2):
for j in range(colNumber-1):
sheet1.write(j,i,write_result[i][j])
sheet.write函式用到的三個函式分別是寫入單元格行號,寫入單元格列號,用於寫入單元格的元素值,因為我們的列表是2*n的矩陣,所以要成豎排格式需要i和j下標互換。
6.完整程式碼及結果
#pip install xlrd xlwt
import xlrd
import xlwt
from datetime import datetime
workbook=xlrd.open_workbook('./時刻表.xlsx')
booksheet=workbook.sheet_by_index(0)
row_dict=dict(map(reversed,enumerate(booksheet.row_values(1))))
col_leave_index=row_dict["出發時間"]
col_arrive_index=row_dict["到達時間"]
col_leave=booksheet.col_values(col_leave_index)
col_arrive=booksheet.col_values(col_arrive_index)
colNumber=len(col_leave)
col_result=[(xlrd.xldate.xldate_as_datetime(col_arrive[i],0)-\
xlrd.xldate.xldate_as_datetime(col_leave[i],0)).seconds/3600 for i in range(2,colNumber)]
#print time needed
print("各條線路需要時間\n"+"-"*32)
for i in range(0,len(col_result)):
print("線路序號"+str(i+1)+"需要"+"{}".format(col_result[i])+"小時")
#write a new xls file
new_workbook=xlwt.Workbook()
sheet1=new_workbook.add_sheet('result',cell_overwrite_ok=True)
write_result=[["線路序號"]+[str(i) for i in range(1,colNumber-1)],["所需時間"]+[str(i) for i in col_result]]
for i in range(2):
for j in range(colNumber-1):
sheet1.write(j,i,write_result[i][j])
new_workbook.save('result.xls')
寫入的新xls檔案截圖:
命令列列印截圖:
相關文章
- python讀寫excel檔案PythonExcel
- easypoi 讀取 Excel 簡單應用Excel
- 教你如何運用python實現簡單檔案讀寫函式Python函式
- 用Pandas讀寫Excel檔案-輸出單sheet和多sheetExcel
- Python讀寫EXCEL檔案常用方法大全PythonExcel
- linux讀寫檔案 簡單版Linux
- 簡單介紹python程式設計之檔案讀寫Python程式設計
- Python 簡明教程 --- 24,Python 檔案讀寫Python
- 用SpringMVC來簡單的操作Excel檔案SpringMVCExcel
- Python|讀、寫Excel檔案(三種模組三種方式)PythonExcel
- 「Python」:檔案讀寫Python
- Python——檔案讀寫Python
- Python 讀寫檔案Python
- Python讀寫檔案Python
- C#讀寫xml檔案應用案例C#XML
- 基於Python的介面自動化-讀寫excel檔案PythonExcel
- python 讀寫 excelPythonExcel
- Python讀寫ExcelPythonExcel
- python讀取docx檔案,就是如此簡單Python
- python讀取和生成excel檔案PythonExcel
- python檔案讀寫操作Python
- Python 檔案讀寫(Python IO)Python
- 用 ABAP 新建本地 Excel 檔案並寫入資料試讀版Excel
- Pandas 基礎 (4) - 讀 / 寫 Excel 和 CSV 檔案Excel
- Python中的檔案讀寫Python
- python 檔案讀寫練習Python
- python之 檔案讀與寫Python
- Python:讀寫檔案(I/O) | 組織檔案Python
- python讀寫excel表操作PythonExcel
- 學習筆記(30):Python資料清洗實戰-Excel檔案讀寫筆記PythonExcel
- python學習之讀寫檔案Python
- Python檔案讀寫--錯誤一Python
- Python之檔案讀寫小練Python
- 詳解python檔案讀寫操作Python
- python寫的FTP簡單上傳下載檔案薦PythonFTP
- js讀寫二進位制檔案簡單程式碼例項JS
- javascript讀寫二進位制檔案簡單程式碼例項JavaScript
- WinForm讀取Excel檔案ORMExcel