(1) 如果excel文件是xls,2003版的,使用xlrd和xlwt庫來對xls文件進行操作
(2) 如果excel文件是xlsx,2007以上版的,使用openpyxl庫來對xlsx文件進行操作
Tips:xlrd、xlwt和openpyxl非python自帶庫,需要進行安裝,可以查看我之前的文章。
如果你在學習Python的過程當中有遇見任何問題,可以加入我的python交流學習qq群:683380553,多多交流問題,互幫互助,群里有不錯的學習教程和開發工具。學習python有任何問題(學習方法,學習效率,如何就業),可以隨時來咨詢我,如果你準備學習大數據,也歡迎加入大數據學習交流qq群683380553,每天與大家分享學習資源哦。
我們使用Python做數據挖掘和分析時候,當數據行超過一定數量,xls文件是存不下的。顯然無法滿足我們的大量數據存儲需求,這個時候需要改用xlsx。
那具體xls和xlsx最大分別可以存多少行呢?
(1) 對于2003版本的xls文件,最大行數是65536行
(2) 對于2007版本的xlsx文件,最大行數是1048576行
閑話不多聊,直接上代碼干貨
#!/usr/bin/env python3
–– coding: utf-8 ––
讀寫2007 excel
import pprint
import openpyxl
import openpyxl.styles
from openpyxl.styles import Font,colors
讀取Excel文件
def readExcel(filename):
workbook = openpyxl.load_workbook(filename)
worksheet = workbook[‘用戶’]
list = []
for row in worksheet.rows: # 1行1行讀
lineData = [] # 行數據
col = 1
for cell in row:
lineData.append(cell.value) # 1列1列讀
col = col + 1
list.append(lineData)
return list
操作數據
def operateData(filename):
list = readExcel(filename)
# 去除第一行,第一行是表頭
list.pop(0)
pprint.pprint(list)
pprint.pprint(“先按性別排序,再按身高排序”)
# 要對身高進行排序,但是男女有別
# 先按性別排序,再按身高排序
list.sort(key=lambda ele: (ele[3], ele[4]))
pprint.pprint(list)
獲取Excel標簽列表
比如第5行標簽列表,總共4列 [‘A5’, ‘B5’, ‘C5’, ‘D5’]
def getTagList(index, colNum):
tagList = []
for i in range(0, colNum):
# A的ascii碼值65
tag = chr(65 + i) + str(index)
tagList.append(tag)
return tagList
寫入Excel文件
def writeExcel(outputFilePath, list):
book = openpyxl.Workbook()
sheet = book.create_sheet(“用戶”, 0)
sheet.title = “用戶” # sheet名稱
rowNum = len(list)
try:
# 1行1行讀取
for i in range(1, rowNum + 1): # 下標從1開始
datalist = list[i -1] # 讀取1行
col = 1
# 1列1列寫入
for data in datalist:
sheet.cell(i, col, data) #寫入內容
col += 1
# 獲取標簽列表
tagList = getTagList(i, len(datalist))
font = Font(‘微軟雅黑’, size = 14, color = ‘333333’)
# 設置單元格字體、字號、顏色
for tag in tagList:
sheet[tag].font = font # 設置字體
# 保存文件
book.save(outputFilePath)
except Exception as e: # 捕獲異常
print(e)
主函數
if name == “main“:
print(“讀取xlsx格式的數據”)
userList = readExcel(‘user.xlsx’)
print(“寫入xlsx文件”)
writeExcel(“user2.xlsx”, userList)
print(“操作數據”)
operateData(‘user.xlsx’)
image