Python讀取xlsx文件的實(shí)現(xiàn)方法
腳本如下:
from openpyxl import load_workbook workbook = load_workbook(u'/tmp/test.xlsx') #找到需要xlsx文件的位置 booksheet = workbook.active #獲取當(dāng)前活躍的sheet,默認(rèn)是第一個(gè)sheet #如果想獲取別的sheet頁采取下面這種方式,先獲取所有sheet頁名,在通過指定那一頁。 # sheets = workbook.get_sheet_names() # 從名稱獲取sheet # booksheet = workbook.get_sheet_by_name(sheets[0]) #獲取sheet頁的行數(shù)據(jù) rows = booksheet.rows #獲取sheet頁的列數(shù)據(jù) columns = booksheet.columns i = 0 # 迭代所有的行 for row in rows: i = i + 1 line = [col.value for col in row] cell_data_1 = booksheet.cell(row=i, column=3).value #獲取第i行1 列的數(shù)據(jù) cell_data_2 = booksheet.cell(row=i, column=4).value #獲取第i行 2 列的數(shù)據(jù) cell_data_3 = booksheet.cell(row=i, column=8).value #獲取第i行 3 列的數(shù)據(jù) cell_data_4 = booksheet.cell(row=i, column=18).value #獲取第i行 4 列的數(shù)據(jù) print (cell_data_1, cell_data_2, cell_data_3, cell_data_4)
實(shí)例:python讀取excel數(shù)據(jù)做分類統(tǒng)計(jì)
某excel中記錄了某個(gè)人的通話記錄,下面程序?qū)凑胀ㄔ挼攸c(diǎn),通話類型等統(tǒng)計(jì)通話時(shí)間
# -*- coding:utf-8 -*-
import xlrd
import datetime
infos=[]
info_file=xlrd.open_workbook('src.xls')#打開excel文件
info_sheet=info_file.sheets()[0]#通過索引順序獲取工作表
row_count=info_sheet.nrows#獲取行數(shù),列數(shù)ncols
for row in range(1,row_count):
time_string=info_sheet.cell(row,3).value
time_s_sp=time_string.split(':')
infos.append(#該數(shù)組里放了row_count個(gè)字典
{
'type':info_sheet.cell(row,2).value,#獲取單元格,通話類型,主叫被叫
'other_cellphone':info_sheet.cell(row,0).value,#對(duì)方號(hào)碼,
'timespan':datetime.timedelta(seconds=int(time_s_sp[2]),minutes=int(time_s_sp[1]),hours=int(time_s_sp[0])),
'gpscity':info_sheet.cell(row,5).value#通話是本地還是外地
}
)
time_all=datetime.timedelta(seconds=0)#初始化
time_types={}
time_classes={}
time_numbers={}
for infor in infos:#取出該數(shù)組里的字典
time_all +=infor['timespan']#求總通話次數(shù)
infor_type=infor['type']
if infor_type in time_types:
time_types[infor_type]+=infor['timespan']
else:
time_types[infor_type]=infor['timespan']#按通話類型統(tǒng)計(jì)通話時(shí)間
infor_class=infor['gpscity']
if infor_class in time_classes:
time_classes[infor_class]+=infor['timespan']
else:
time_classes[infor_class]=infor['timespan']#這里相當(dāng)于先分類賦值再++,按歸屬地統(tǒng)計(jì)通話時(shí)間
infor_number=infor['other_cellphone']
if infor_number in time_numbers:
time_numbers[infor_number]+=infor['timespan']
else:
time_numbers[infor_number]=infor['timespan']#根據(jù)號(hào)碼統(tǒng)計(jì)通話時(shí)間
print '總通話時(shí)間:%s' % time_all
print
print '總通話方式分類'
for k,v in time_types.items():
print k.encode('utf-8'),v
print
print '通話類型分類:'
for k,v in time_classes.items():
print k.encode('utf-8'),v
print
print '對(duì)方號(hào)碼分類:'
for k,v in time_numbers.items():
print k,v
再優(yōu)化下代碼
# -*- coding:utf-8 -*-
import xlrd
from datetime import timedelta
def read_excel(file_excel):#讀excel并將需要的數(shù)據(jù)分類放在數(shù)組里
infos=[]
info_file=xlrd.open_workbook(file_excel)
info_sheet=info_file.sheets()[0]
row_count=info_sheet.nrows
for row in range(1,row_count):
time_string=info_sheet.cell(row,3).value
time_s_sp=time_string.split(':')
infos.append(
{
'type':info_sheet.cell(row,2).value,
'other_cellphone':info_sheet.cell(row,0).value,
'timespan':timedelta(seconds=int(time_s_sp[2]),minutes=int(time_s_sp[1]),hours=int(time_s_sp[0])),
'gpscity':info_sheet.cell(row,5).value
}
)
return infos
def count_cell(list_dirs,infotype):#統(tǒng)計(jì)總通話及分類統(tǒng)計(jì)結(jié)果,存在字典里
result_dir={}
time_all=timedelta(seconds=0)
for list_dir in list_dirs:
time_all +=list_dir['timespan']
info_type = list_dir[infotype]
if info_type not in result_dir:
result_dir[info_type]=list_dir['timespan']
else:
result_dir[info_type]+=list_dir['timespan']
return time_all,result_dir
def print_result(result_dir):#打印數(shù)據(jù)
for k,v in result_dir.items():
print k.encode('utf-8'),v
if __name__=="__main__":
list_dirs=read_excel('src.xls')
time_all,result_type=count_cell(list_dirs,'type')
result_cell=count_cell(list_dirs,'other_cellphone')
result_gpscity = count_cell(list_dirs, 'gpscity')
print '總通話時(shí)間:%s' % time_all
print '按照通話類型分類:'
print_result(result_type)
print '按照號(hào)碼分類:'
print_result(result_cell[1])
print '按照歸屬地分類:'
print_result(result_gpscity[1])
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python 異步協(xié)程函數(shù)原理及實(shí)例詳解
這篇文章主要介紹了Python 異步協(xié)程函數(shù)原理及實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
Python lambda和Python def區(qū)別分析
Python支持一種有趣的語法,它允許你快速定義單行的最小函數(shù)。這些叫做lambda的函數(shù),是從Lisp借用來的,可以用在任何需要函數(shù)的地方2014-11-11
python 統(tǒng)計(jì)代碼耗時(shí)的幾種方法分享
本文實(shí)例講述了Python中統(tǒng)計(jì)代碼片段、函數(shù)運(yùn)行耗時(shí)的幾種方法,分享給大家,僅供參考。2021-04-04
python paramiko實(shí)現(xiàn)ssh遠(yuǎn)程訪問的方法
這篇文章主要介紹了python paramiko模塊實(shí)現(xiàn)ssh遠(yuǎn)程訪問的方法,大家參考使用2013-12-12
Python實(shí)現(xiàn)讀取文件中的特定行的方法詳解
這篇文章主要為大家詳細(xì)介紹了如何在Python中實(shí)現(xiàn)讀取文件中的特定行,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
python數(shù)據(jù)預(yù)處理之?dāng)?shù)據(jù)標(biāo)準(zhǔn)化的幾種處理方式
這篇文章主要介紹了python數(shù)據(jù)預(yù)處理之?dāng)?shù)據(jù)標(biāo)準(zhǔn)化的幾種處理方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07

