python3利用xlrd和openpyxl處理表格中以分號結尾固話和手機號的數據提取出手機號

導入的debug_info包:https://blog.csdn.net/z564359805/article/details/85624881

表格形式如下:

電話中是以分號分開的

 

#!/usr/bin/env python
# coding=utf-8
# 處理蔬菜種植表格

import xlrd
from xlrd import xldate_as_tuple
from openpyxl import load_workbook,Workbook
from debug_info import Log_info

class ExcelUtil:
    def __init__(self, excel_path,logger):
        self.wb = load_workbook(excel_path)
        self.data = xlrd.open_workbook(excel_path)
        self.wb_ = Workbook()
        names = self.data.sheet_names()  # 返回book中所有工作表的名字
        # 獲取所有sheet
        sheet_table = self.data.sheets()
        for k in range(len(sheet_table)):
            logger("處理%s"%names[k])
            # 獲取總行數
            self.rowNum = sheet_table[k].nrows
            # 獲取總列數
            self.colNum = sheet_table[k].ncols
            # [[],[],[]]
            result = self.dict_data(sheet_table[k],logger)
            # 保存新的表的時候每個sheet表的名字和原來的一樣,創建sheet表
            self.ws = self.wb_.create_sheet(names[k],index=k)
            # 凍結首行
            self.ws.freeze_panes = 'A2'
            self.ws.column_dimensions['A'].width = 19
            self.ws.column_dimensions['B'].width = 19
            self.ws.column_dimensions['C'].width = 13
            # 寫入數據
            for k in range(len(result)):
                for j in range(len(result[k])):
                    # 創建表頭
                    self.ws.cell(row=1, column=j + 1).value = "電話" + str(j + 1)
                    # 號碼位數是11位,不是0開頭,不包含"-",是1開頭的
                    if len(result[k][j]) == 11 and not result[k][j].startswith("0")and "-" not in result[k][j] and result[k][j].startswith("1"):
                        self.ws.cell(row=k+2, column=j+1).value = result[k][j]
                    else:
                        self.ws.cell(row=k + 2, column=j + 1).value = "不滿足要求"
        # 刪除最後一個無用表格
        self.wb_.remove(self.wb_.worksheets[len(sheet_table)])
        self.wb_.save("整理後.xlsx")
        self.wb.close()
        self.wb_.close()

    # 獲取表格數據
    def dict_data(self,sheet_table,logger):
        if self.rowNum <= 1:
            logger("總行數小於1,請覈實表格數據!")
        else:
            r = []
            # j=1代表第二行
            j = 1
            # i控制循環次數,也就是取多少行數據
            for i in range(self.rowNum - 1):
                # 從第二行取對應values值
                values = sheet_table.row_values(j)
                #  列數
                for x in range(self.colNum):
                    # 只選擇名稱包含以下字段對應的電話
                    if "果蔬" in values[x] or "蔬菜" in values[x]or "瓜菜" in values[x]:
                        for k in values:
                            if ";" in k:
                                r.append(k.replace("\t","").split(";"))
                j += 1
            return r

if __name__ == "__main__":
    logger = Log_info().main()
    filePath = "./蔬菜.xlsx"
    ExcelUtil(filePath,logger)

處理後,全部是手機號了:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章