<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用Python讀寫操作Excel數(shù)據(jù)!

          共 9566字,需瀏覽 20分鐘

           ·

          2022-11-25 04:39

          點擊關(guān)注上方“Stephen”,

          設(shè)為“置頂或星標”,第一時間送達干貨

          來源丨數(shù)據(jù)STUDIO


          大家好。
          對比其它編程語言,我們都知道Python最大的優(yōu)勢是代碼簡單,有豐富的第三方開源庫供開發(fā)者使用。伴隨著近幾年數(shù)據(jù)分析的熱度,Python也成為最受歡迎的編程語言之一。而對于數(shù)據(jù)的讀取和存儲,對于普通人來講,除了數(shù)據(jù)庫之外,最常見的就是微軟的Excel。

          2. 前期準備

          2.1. 初識Excel

          Microsoft Excel是Microsoft為使用Windows和Apple Macintosh操作系統(tǒng)的電腦編寫的一款電子表格軟件。

          2.2. 格式區(qū)別

          Excel中有xls和xlsx兩種格式,它們之間的區(qū)別是:

          • 文件格式不同。xls是一個特有的二進制格式,其核心結(jié)構(gòu)是復合文檔類型的結(jié)構(gòu),而xlsx的核心結(jié)構(gòu)是XML類型的結(jié)構(gòu),采用的是基于 XML的壓縮方式,使其占用的空間更小。xlsx 中最后一個 x 的意義就在于此。
          • 版本不同。xls是Excel2003及以前版本生成的文件格式,而xlsx是Excel2007及以后版本生成的文件格式。
          • 兼容性不同。xlsx格式是向下兼容的,可兼容xls格式。

          2.3. 庫的使用

          Python自帶的模塊中有針對xls格式的xlrd和xlwt模塊,但這兩個庫僅僅是針對xls的操作,當我們要操作xlsx格式文件時,則需要使用到openpyxl第三方庫。

          2.4. 整體思路

          當使用以上幾個模塊的時候,從理論上我們就可以完全操作不同格式的Excel的讀和寫,很多人就疑惑,那這篇文章的作用是什么?我們直接學習對應(yīng)的這三個模塊不就好了嗎?

          答案就是:雖然這幾個庫已經(jīng)把Excel的文件、表、行、列的概念完全轉(zhuǎn)換為Python中的對象,但每次操作都需要遍歷每一個單元格,甚至很多時候我們要花費大量的時間在思考循環(huán)單元格的邊界上,這本身就是在重復造輪子,因此我花了半天時間整理了以下六個函數(shù)。

          3. 代碼展示

          3.1. xlz格式

          3.1.1. 讀取xls格式文件

          def read_xls_excel(url,index):
              '''
              讀取xls格式文件
              參數(shù):
                  url:文件路徑
                  index:工作表序號(第幾個工作表,傳入?yún)?shù)從1開始數(shù))
              返回:
                  data:表格中的數(shù)據(jù)
              '''

              # 打開指定的工作簿
              workbook = xlrd.open_workbook(url)
              # 獲取工作簿中的所有表格
              sheets = workbook.sheet_names()
              # 獲取工作簿中所有表格中的的第 index 個表格
              worksheet = workbook.sheet_by_name(sheets[index-1])
              # 定義列表存儲表格數(shù)據(jù)
              data = []
              # 遍歷每一行數(shù)據(jù)
              for i in range(0, worksheet.nrows):
                  # 定義表格存儲每一行數(shù)據(jù)
                  da = []
                  # 遍歷每一列數(shù)據(jù)
                  for j in range(0, worksheet.ncols):
                      # 將行數(shù)據(jù)存儲到da列表
                      da.append(worksheet.cell_value(i, j))
                  # 存儲每一行數(shù)據(jù)
                  data.append(da)
              # 返回數(shù)據(jù)
              return data

          3.1.2. 寫入xls格式文件

          def write_xls_excel(url,sheet_name,two_dimensional_data):
            '''
              寫入xls格式文件
              參數(shù):
                  url:文件路徑
                  sheet_name:表名
                  two_dimensional_data:將要寫入表格的數(shù)據(jù)(二維列表)
              '''

              # 創(chuàng)建工作簿對象
              workbook = xlwt.Workbook()
              # 創(chuàng)建工作表對象
              sheet = workbook.add_sheet(sheet_name)
              # 遍歷每一行數(shù)據(jù)
              for i in range(0,len(two_dimensional_data)):
                  # 遍歷每一列數(shù)據(jù)
                  for j in range(0,len(two_dimensional_data[i])):
                      # 寫入數(shù)據(jù)
                      sheet.write(i,j,two_dimensional_data[i][j])
              # 保存
              workbook.save(url)
              print("寫入成功")

          3.1.3. 追加寫入xls格式文件

          def write_xls_excel_add(url, two_dimensional_data, index):
              '''
              追加寫入xls格式文件
              參數(shù):
                  url:文件路徑
                  two_dimensional_data:將要寫入表格的數(shù)據(jù)(二維列表)
                  index:指定要追加的表的序號(第幾個工作表,傳入?yún)?shù)從1開始數(shù))
              '''

              # 打開指定的工作簿
              workbook = xlrd.open_workbook(url)
              # 獲取工作簿中的所有表格
              sheets = workbook.sheet_names()
              # 獲取指定的表
              worksheet = workbook.sheet_by_name(sheets[index-1])
              # 獲取表格中已存在的數(shù)據(jù)的行數(shù)
              rows_old = worksheet.nrows
              # 將xlrd對象拷貝轉(zhuǎn)化為xlwt對象
              new_workbook = copy(workbook)
              # 獲取轉(zhuǎn)化后工作簿中的第index個表格
              new_worksheet = new_workbook.get_sheet(index-1)
              # 遍歷每一行數(shù)據(jù)
              for i in range(0, len(two_dimensional_data)):
                  # 遍歷每一列數(shù)據(jù)
                  for j in range(0, len(two_dimensional_data[i])):
                      # 追加寫入數(shù)據(jù),注意是從i+rows_old行開始寫入
                      new_worksheet.write(i+rows_old, j, two_dimensional_data[i][j])
              # 保存工作簿
              new_workbook.save(url)
              print("追加寫入成功")

          3.2. xlsx格式

          3.2.1. 讀取xlsx格式文件

          def read_xlsx_excel(url, sheet_name):
              '''
              讀取xlsx格式文件
              參數(shù):
                  url:文件路徑
                  sheet_name:表名
              返回:
                  data:表格中的數(shù)據(jù)
              '''

              # 使用openpyxl加載指定路徑的Excel文件并得到對應(yīng)的workbook對象
              workbook = openpyxl.load_workbook(url)
              # 根據(jù)指定表名獲取表格并得到對應(yīng)的sheet對象
              sheet = workbook[sheet_name]
              # 定義列表存儲表格數(shù)據(jù)
              data = []
              # 遍歷表格的每一行
              for row in sheet.rows:
                  # 定義表格存儲每一行數(shù)據(jù)
                  da = []
                  # 從每一行中遍歷每一個單元格
                  for cell in row:
                      # 將行數(shù)據(jù)存儲到da列表
                      da.append(cell.value)
                  # 存儲每一行數(shù)據(jù)
                  data.append(da)
              # 返回數(shù)據(jù)
              return data

          3.2.2. 寫入xlsx格式文件

          def write_xlsx_excel(url, sheet_name, two_dimensional_data):
              '''
              寫入xlsx格式文件
              參數(shù):
                  url:文件路徑
                  sheet_name:表名
                  two_dimensional_data:將要寫入表格的數(shù)據(jù)(二維列表)
              '''

              # 創(chuàng)建工作簿對象
              workbook = openpyxl.Workbook()
              # 創(chuàng)建工作表對象
              sheet = workbook.active
              # 設(shè)置該工作表的名字
              sheet.title = sheet_name
              # 遍歷表格的每一行
              for i in range(0, len(two_dimensional_data)):
                  # 遍歷表格的每一列
                  for j in range(0, len(two_dimensional_data[i])):
                      # 寫入數(shù)據(jù)(注意openpyxl的行和列是從1開始的,和我們平時的認知是一樣的)
                      sheet.cell(row=i + 1, column=j + 1, value=str(two_dimensional_data[i][j]))
              # 保存到指定位置
              workbook.save(url)
              print("寫入成功")

          3.2.3. 追加寫入xlsx格式文件

          def write_xlsx_excel_add(url, sheet_name, two_dimensional_data):
              '''
              追加寫入xlsx格式文件
              參數(shù):
                  url:文件路徑
                  sheet_name:表名
                  two_dimensional_data:將要寫入表格的數(shù)據(jù)(二維列表)
              '''

              # 使用openpyxl加載指定路徑的Excel文件并得到對應(yīng)的workbook對象
              workbook = openpyxl.load_workbook(url)
              # 根據(jù)指定表名獲取表格并得到對應(yīng)的sheet對象
              sheet = workbook[sheet_name]
              for tdd in two_dimensional_data:
                  sheet.append(tdd)
              # 保存到指定位置
              workbook.save(url)
              print("追加寫入成功")

          4. 結(jié)果測試

          4.1. 讀取測試

          先準備兩個Excel文件,如圖所示

          其內(nèi)容如下:

          測試代碼:

          輸出結(jié)果:

          結(jié)論:表明讀取并沒有問題!!!接下來測試寫入

          4.2. 寫入測試

          測試代碼:

          結(jié)果輸出:

          看到數(shù)據(jù)被覆蓋了!!!接下來在上面修改后的數(shù)據(jù)的基礎(chǔ)上測試追加寫入

          4.3. 追加寫入測試

          測試代碼:

          結(jié)果輸出:

          追加也沒有問題!!

          5. 總結(jié)

          我一直認為數(shù)據(jù)分析就應(yīng)該以數(shù)據(jù)為主,而不應(yīng)該把大量的代碼花費在設(shè)計Excel表格的樣式上,這樣多少就有點主客顛倒的意思了。總之,希望這篇文章對正在學習Python的你有一定的幫助,如果對你有幫助的話,不妨點個贊和收藏吧!


          END


          關(guān)注 Stephen,一起學習,一起成長。


          “在看”支持下吧

          瀏覽 40
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久99久久精品视频 | 女人18片毛片90分钟免费 | 污污的视频网站 | 黄色的A片 | 午夜国产在线观看 |