免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
如何利用Python編程批量處理Excel來提高日常工作效率!

最近的工作遇到一個(gè)需求,整理多個(gè)相同格式但是不標(biāo)準(zhǔn)的Excel表格,最終匯總成一個(gè)Excel表格,并進(jìn)行數(shù)據(jù)透視分析。

表格內(nèi)涉及到合并的單元格,不同表格表頭位置有偏差等問題。目標(biāo)是將所有表格內(nèi)容相同表頭內(nèi)容統(tǒng)計(jì)到一個(gè)表內(nèi)。由于Excel表格內(nèi)容數(shù)據(jù)量巨大,如果使用人力的手段,工作量巨大,并且容易出錯(cuò)(預(yù)估工作量3天)。所以決定使用Python對(duì)Excel進(jìn)行自動(dòng)處理,實(shí)現(xiàn)一鍵導(dǎo)出目標(biāo)Excel的目的。

大致步驟:Python學(xué)習(xí)交流群:1004391443

1.安裝Python3,pip工具環(huán)境

2.安裝xlrd和xlwt

3.讀取所有源Excel文件

4.將讀取到的Excel信息組織到新的Excel對(duì)象中

5.數(shù)據(jù)緩存和分析

6.向新Excel對(duì)象中追加分析結(jié)果

7.將新Excel對(duì)象保存為目標(biāo)輸出文件(最終想要的文件)

1.對(duì)于Python環(huán)境的安裝本文不做說明。

2.安裝Python擴(kuò)展包有不同的方式,這里使用pip命令安裝xlrd和xlwt。

在Windows下,打開命令提示符(控制臺(tái)),cd python的安裝路徑下Scripts文件夾下(在這里有pip命令執(zhí)行工具)?;蛘邔⒃撀窂教砑拥较到y(tǒng)環(huán)境變量。

xlrd:讀取Excel的擴(kuò)展包

執(zhí)行:pip install xlrd

xlwt:寫入Excel的擴(kuò)展包

執(zhí)行:pip install xlwt

隨便寫一個(gè)py文件寫入import xlrd, xlwt 執(zhí)行該文件不出錯(cuò)說明安裝成功。

或者打開python自帶的編輯器進(jìn)行輸入測試。

3.具體代碼如下

# -*- coding: utf-8 -*-import xlrdimport xlwtimport sysdef read(file_list):    # 創(chuàng)建新的workbook    out_work_book = xlwt.Workbook(encoding = 'utf-8')    # 為了將多個(gè)文件的相同表頭的sheet和并到一個(gè)sheet內(nèi),定義新sheet寫入的行號(hào)位置    out_work_book_rows = [0,0]    # 取得傳入的文件列表 (第一個(gè)參數(shù)為腳本名字)    for file_name in file_list[1:]:        # 打開文件        workbook = xlrd.open_workbook(file_name)        # 取得當(dāng)前文檔的sheet列表        sheet_names = workbook.sheet_names()        for sheet_idx in range(len(sheet_names)):            sheet_name = sheet_names[sheet_idx]                        # sheet = workbook.sheet_by_index(sheet_idx)            sheet = workbook.sheet_by_name(sheet_name)            # sheet.row_values(n)   獲取整行數(shù)據(jù)            # sheet.col_values(n)   獲取整列數(shù)據(jù)            # 獲取行數(shù)            rows_count = sheet.nrows            # 獲取列數(shù)            cols_count = sheet.ncols            # 存儲(chǔ)寫入的列數(shù)            write_col_count            # 創(chuàng)建新的sheet            if len(out_work_book_sheet) <= sheet_idx:                out_work_book_sheet[sheet_idx] = out_work_book.add_sheet('sheet' sheet_idx)            # 寫入sheet            for curr_col_num in range(cols_count)                # 當(dāng)前列的內(nèi)容                col = sheet.col_values(curr_col_num)                # 遍歷當(dāng)前列的所有選項(xiàng)                for index in range(len(col))                    # 當(dāng)前列第index的內(nèi)容                    value = col[index]                    # 在寫入的sheet的行號(hào)上,加入上一個(gè)表寫到的位置行號(hào),繼續(xù)向后追加內(nèi)容                    out_work_book_sheet[sheet_idx].write(out_work_book_rows[sheet_idx]   index, write_col_count, value)                write_col_count              out_work_book_rows[sheet_idx]  = cols_count    # 輸出目標(biāo)文件    out_work_book.save('out.xls')if __name__ == "__main__":    read(sys.argv)

4.針對(duì)合并的單元格,上述代碼會(huì)出現(xiàn)合并單元格只有一個(gè)格子有內(nèi)容其余為空的情況。這種情形,現(xiàn)將當(dāng)前sheet表格內(nèi)所有合并單元格數(shù)據(jù)保存下來,當(dāng)遇到屬于合并單元格的部分,則默認(rèn)選取該合并單元格的第一個(gè)格子的數(shù)值即可。代碼如下:

def get_merged_cells_value(sheet, row_index, col_index):    # 獲得當(dāng)前sheet的所有合并單元格數(shù)據(jù)    merged = sheet.merged_cells    # 判斷給定的單元格,是否屬于合并單元格,如果是合并單元格,就返回合并單元格的內(nèi)容    for (rlow, rhigh, clow, chigh) in merged:        if (row_index >= rlow and row_index < rhigh):            if (col_index >= clow and col_index < chigh):                cell_value = sheet.cell_value(rlow, clow)                return cell_value    return None

5.數(shù)據(jù)緩存可以利用python中的容器,和對(duì)象結(jié)構(gòu),將Excel中的數(shù)據(jù)對(duì)象化,在讀取時(shí)候進(jìn)行實(shí)例化然后進(jìn)行保存。在需要進(jìn)行數(shù)據(jù)分析的時(shí)候利用。

6.在遇到特殊的表格格式的時(shí)候,讀取的內(nèi)容可能在轉(zhuǎn)存的時(shí)候出現(xiàn)類型錯(cuò)誤,導(dǎo)致無法識(shí)別。例如時(shí)間類型,正確顯示需要按特定格式進(jìn)行讀取并且轉(zhuǎn)換。

表格類型說明: table.ctype

0 empty

1 string

2 number

3 date

4 boolean

5 error

代碼如下:

from datetime import datetime,datedef get_merged_cells_value(workbook, sheet, row_index, col_index):    # 獲得當(dāng)前sheet的所有合并單元格數(shù)據(jù)    merged = sheet.merged_cells    # 判斷給定的單元格,是否屬于合并單元格,如果是合并單元格,就返回合并單元格的內(nèi)容    for (rlow, rhigh, clow, chigh) in merged:        if (row_index >= rlow and row_index < rhigh):            if (col_index >= clow and col_index < chigh):                if sheet.cell(rlow, clow).ctype == 3:                    date_value = xlrd.xldate_as_tuple(sheet.cell(rlow, clow), workbook.datemode)                    # 轉(zhuǎn)換顯示格式為2019/05/05                    cell_value = date(*date_value[:3]).strftime('%Y/%m/%d')                else:                    cell_value = sheet.cell_value(rlow, clow)                                return cell_value    return None

7.最終,我們寫一個(gè)windows下的bat批處理文件或者在linux下寫一個(gè)shell,將文檔名字作為參數(shù)傳入執(zhí)行即可。

到此我利用程序完成了幾天的工作,還可以在以后相同的使用環(huán)境下更快速的完成工作。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Python Excel 讀寫及追加寫入(xlrd、xlwt、openpyxl、XlsxWriter)
python中使用xlrd、xlwt操作excel表格詳解
python excel 的相關(guān)操作
Python實(shí)現(xiàn)自動(dòng)化辦公(一):Python對(duì)Excel的基本操作(openpyxl)
Python3 xlrd庫基本教程
Python|python對(duì)Excel讀寫操作的問題總結(jié)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服