欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

零基礎(chǔ)使用Python讀寫處理Excel表格的方法

 更新時(shí)間:2019年05月02日 10:01:10   作者:Cloudox_  
這篇文章主要介紹了Python讀寫處理Excel表格,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

由于需要解決大批量Excel處理的事情,與其手工操作還不如寫個(gè)簡(jiǎn)單的代碼來處理,大致選了一下感覺還是Python最容易操作。

安裝庫(kù)Python環(huán)境

首先當(dāng)然是配環(huán)境,不過選Python的一個(gè)重要原因就是Mac內(nèi)是自帶Python環(huán)境的,不需要額外的配置環(huán)境,省下了一筆工作,如果你用的是Windows系統(tǒng),那就還需要配置一下Python的環(huán)境了,我Mac的Python版本是2.7。

第三方庫(kù)

Python自己是不支持直接操作Excel的,但是Python強(qiáng)大之處就在于有大量好用的第三方庫(kù),這里我們選用讀Excel的xlrd庫(kù)和寫Excel的xlwt庫(kù)來操作。

關(guān)于第三方庫(kù)的安裝很簡(jiǎn)單,首先,去專門下載Python庫(kù)的網(wǎng)站下載兩個(gè)庫(kù)的源碼:
* 下載xlrd
* 下載xlwt

注意對(duì)于新手來說最簡(jiǎn)單的安裝方式就是源碼安裝,不需要去折騰第三方庫(kù)的管理器,直接點(diǎn)擊這個(gè)先下載兩個(gè)庫(kù)的源碼:

你看他后面也描述了類型是源碼嘛。

下載好之后在mac中解壓,得到文件夾,可以看到里面都是有一個(gè) setup.py 文件的:

這里當(dāng)然不是直接雙擊安裝了,py類型表示它是一個(gè)Python代碼文件,雙擊只會(huì)打開文件看代碼。我們要使用終端,輸入命令號(hào)進(jìn)入當(dāng)前所在的文件夾,比如我把文件放在了“下載”中,那么做法是:

$ cd Downloads/
$ cd xlwt-1.1.2
$ sudo python setup.py install

這里 cd 的意思是進(jìn)入該文件夾,sudo 的意思是使用管理員權(quán)限安裝,不使用的話會(huì)告訴你沒有權(quán)限的,回車后會(huì)要你輸入電腦密碼,輸入后回車即可,python 是執(zhí)行 python代碼文件的命令,install 就是安裝了。

然后會(huì)看到刷刷刷一堆文字過去,最后告訴你 finished 了,就是安裝完成了。

xlrd 也是同樣的安裝方式。

寫代碼

讀寫Excel的第三方庫(kù)都安裝好了,就可以開始寫代碼了。

我們?cè)谝粋€(gè)文件夾下創(chuàng)建一個(gè) hello.py 文件,然后用sublime之類的文檔編輯器打開它,開始編寫代碼。(PS:Python中 # 號(hào)開頭表示注釋)

讀Excel

# -*- coding: utf-8 -*- 
import xdrlib ,sys
import xlrd

#打開excel文件
def open_excel(file= 'test.xlsx'):
  try:
    data = xlrd.open_workbook(file)
    return data
  except Exception,e:
    print str(e)

#根據(jù)名稱獲取Excel表格中的數(shù)據(jù)  參數(shù):file:Excel文件路徑   colnameindex:表頭列名所在行的索引 ,by_name:Sheet1名稱
def excel_table_byname(file= 'test.xlsx', colnameindex=0, by_name=u'Sheet1'):
  data = open_excel(file) #打開excel文件
  table = data.sheet_by_name(by_name) #根據(jù)sheet名字來獲取excel中的sheet
  nrows = table.nrows #行數(shù) 
  colnames = table.row_values(colnameindex) #某一行數(shù)據(jù) 
  list =[] #裝讀取結(jié)果的序列
  for rownum in range(0, nrows): #遍歷每一行的內(nèi)容
     row = table.row_values(rownum) #根據(jù)行號(hào)獲取行
     if row: #如果行存在
       app = [] #一行的內(nèi)容
       for i in range(len(colnames)): #一列列地讀取行的內(nèi)容
        app.append(row[i])
       list.append(app) #裝載數(shù)據(jù)
  return list

#主函數(shù)
def main():
  tables = excel_table_byname()
  for row in tables:
    print row

if __name__=="__main__":
  main()

這個(gè)代碼很多我都注釋了,只講幾個(gè)要注意的地方,首先最開始我們?cè)O(shè)置了utp8編碼,然后一定要記得導(dǎo)入xlrd包,這樣才能使用它的函數(shù)去讀取excel。里面的 main() 是主函數(shù),python 會(huì)運(yùn)行這個(gè)函數(shù),這個(gè)函數(shù)調(diào)用了其余的函數(shù)來讀取數(shù)據(jù)。這個(gè)代碼實(shí)現(xiàn)的是將excel文件 test.xlsx 中的 Sheet1 表中的數(shù)據(jù)一行行讀取出來并打印。

Excel中內(nèi)容如下:

有兩行內(nèi)容。

要運(yùn)行這個(gè)代碼,需要用終端使用命令行,首先 cd 進(jìn)入到代碼所在的文件夾,代碼和Excel文件都要放在這個(gè)文件夾里。然后使用 python hello.py 命令來運(yùn)行這個(gè)代碼文件:

以上就是 Python 讀取并打印出來的內(nèi)容,u 表示使用的是unicode編碼,可以看到與Excel中是一致的。

創(chuàng)建Excel

使用xlwt庫(kù)我們可以創(chuàng)建一個(gè)Excel:

# -*- coding: utf-8 -*- 
import xlwt

def testXlwt(file = 'new.xls'):
  book = xlwt.Workbook() #創(chuàng)建一個(gè)Excel
  sheet1 = book.add_sheet('hello') #在其中創(chuàng)建一個(gè)名為hello的sheet
  sheet1.write(0,0,'cloudox') #往sheet里第一行第一列寫一個(gè)數(shù)據(jù)
  sheet1.write(1,0,'ox') #往sheet里第二行第一列寫一個(gè)數(shù)據(jù)
  book.save(file) #創(chuàng)建保存文件

#主函數(shù)
def main():
  testXlwt()

if __name__=="__main__":
  main()

這個(gè)代碼更簡(jiǎn)單,同樣記得要在開頭導(dǎo)入庫(kù)。

代碼中我們創(chuàng)建了一個(gè)excel,在其中添加一個(gè)sheet,寫入兩個(gè)數(shù)據(jù),最后按照我們的命名保存了文件。

按照上面同樣的方法運(yùn)行代碼后,終端中不會(huì)有打印的內(nèi)容,但是我們?nèi)ノ募A中看會(huì)得到一個(gè)名為 new.xls 的新excel文件,打開可以看到:

按照我們的方法寫了數(shù)據(jù),同時(shí)sheet名字也是hello。

值得注意的是,在xlwt庫(kù)的說明中有這么一句話:

Library to create spreadsheet files compatible with MS Excel 97/2000/XP/2003 XLS files, on any platform, with Python 2.6, 2.6, 3.3+

也就是說,它只能創(chuàng)建 xls 的文件格式,不能創(chuàng)建現(xiàn)在的 xlsx 格式,其實(shí)有點(diǎn)老了,如果你把文件名寫了 xlsx 格式,將會(huì)無法打開。

處理Excel內(nèi)容

其實(shí)單獨(dú)的讀和寫只是基本功,我們最終是想要處理Excel中的內(nèi)容的。

這里我們假設(shè)一個(gè)使用場(chǎng)景,我們希望將Excel中所有第一列和第二列相同的行數(shù)據(jù)篩選出來保存到一個(gè)新的Excel中去。

那么我們的流程是:

打開目標(biāo)Excel讀取內(nèi)容讀取每一行的同時(shí)篩選第一列和第二列相等的行保留下來創(chuàng)建一個(gè)新Excel將篩選出來的內(nèi)容寫進(jìn)去保存新Excel

那么我們看代碼:

# -*- coding: utf-8 -*- 
import xdrlib ,sys
import xlrd
import xlwt

#打開excel文件
def open_excel(file= 'test.xlsx'):
  try:
    data = xlrd.open_workbook(file)
    return data
  except Exception,e:
    print str(e)

#根據(jù)索引獲取Excel表格中的數(shù)據(jù)  參數(shù):file:Excel文件路徑   colnameindex:表頭列名所在行的索引 ,by_index:表的索引
def excel_table_byindex(file= 'test.xlsx',colnameindex=0,by_index=0):
  data = open_excel(file) #打開excel文件
  table = data.sheets()[by_index] #根據(jù)sheet序號(hào)來獲取excel中的sheet
  nrows = table.nrows #行數(shù)
  ncols = table.ncols #列數(shù)
  colnames = table.row_values(colnameindex) #某一行數(shù)據(jù) 
  list =[] #裝讀取結(jié)果的序列
  for rownum in range(0,nrows): #遍歷每一行的內(nèi)容

     row = table.row_values(rownum) #根據(jù)行號(hào)獲取行
     if row: #如果行存在
       app = [] #一行的內(nèi)容
       for i in range(len(colnames)): #一列列地讀取行的內(nèi)容
        app.append(row[i])
       if app[0] == app[1] : #如果這一行的第一個(gè)和第二個(gè)數(shù)據(jù)相同才將其裝載到最終的list中
        list.append(app)
  testXlwt('new.xls', list) #調(diào)用寫函數(shù),講list內(nèi)容寫到一個(gè)新文件中
  return list

#將list中的內(nèi)容寫入一個(gè)新的file文件
def testXlwt(file = 'new.xls', list = []):
  book = xlwt.Workbook() #創(chuàng)建一個(gè)Excel
  sheet1 = book.add_sheet('hello') #在其中創(chuàng)建一個(gè)名為hello的sheet
  i = 0 #行序號(hào)
  for app in list : #遍歷list每一行
    j = 0 #列序號(hào)
    for x in app : #遍歷該行中的每個(gè)內(nèi)容(也就是每一列的)
      sheet1.write(i, j, x) #在新sheet中的第i行第j列寫入讀取到的x值
      j = j+1 #列號(hào)遞增
    i = i+1 #行號(hào)遞增
  # sheet1.write(0,0,'cloudox') #往sheet里第一行第一列寫一個(gè)數(shù)據(jù)
  # sheet1.write(1,0,'ox') #往sheet里第二行第一列寫一個(gè)數(shù)據(jù)
  book.save(file) #創(chuàng)建保存文件

#主函數(shù)
def main():
  tables = excel_table_byindex()
  for row in tables:
    print row

if __name__=="__main__":
  main()

這次我們開頭要導(dǎo)入xlrd和xlwt兩個(gè)庫(kù),因?yàn)榧纫x也要寫。

代碼內(nèi)容基本與上面兩個(gè)差不多,有一點(diǎn)點(diǎn)加深,在讀取的時(shí)候我們判斷了第一列和第二列數(shù)據(jù)相同的行才加到list中去。在寫的時(shí)候我們用了兩個(gè)for循環(huán)來對(duì)新excel中的一個(gè)個(gè)單元格寫數(shù)據(jù),使用了i和j兩個(gè)變量來記錄位置。此外在獲取sheet的時(shí)候,與上面的不同,這里是通過sheet的序號(hào)(這里是0)來獲取的,上面的是通過sheet名稱來獲取。

我們要處理的Excel中的內(nèi)容是這樣的:

按道理我們篩選后只應(yīng)該保留第一行的內(nèi)容,運(yùn)行完后我們得到了一個(gè)新的Excel文件,里面的內(nèi)容如下:

可以看到和預(yù)期是相符的。

結(jié)

這里只是簡(jiǎn)單的例子,兩個(gè)庫(kù)的操作還有很多,能夠進(jìn)行的處理也有很多,如果要處理大量數(shù)據(jù),可能還要考慮內(nèi)存,分批次來處理,總之,本文只是一個(gè)入門,盡量追求零基礎(chǔ)也能學(xué)著使用來解放勞動(dòng)力,更多的用法,就看自己琢磨了。

可以下載我的示例工程:https://github.com/Cloudox/PYReadWriteExcelDemo

以上所述是小編給大家介紹的Python讀寫處理Excel表格詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Python網(wǎng)絡(luò)編程之socket與socketserver

    Python網(wǎng)絡(luò)編程之socket與socketserver

    這篇文章介紹了Python網(wǎng)絡(luò)編程之socket與socketserver,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • 詳解Python使用tensorflow入門指南

    詳解Python使用tensorflow入門指南

    本篇文章主要介紹了詳解Python使用tensorflow入門指南,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • python爬蟲實(shí)戰(zhàn)steam加密逆向RSA登錄解析

    python爬蟲實(shí)戰(zhàn)steam加密逆向RSA登錄解析

    今天帶來爬蟲實(shí)戰(zhàn)的文章。在挑選游戲的過程中感受學(xué)習(xí),讓你突飛猛進(jìn)。本文主要實(shí)現(xiàn)用Python逆向登錄世界上最大的游戲平臺(tái)源碼分享,了解steam加密手段有多高明
    2021-10-10
  • 使用Python實(shí)現(xiàn)為PDF文檔設(shè)置和移除密碼

    使用Python實(shí)現(xiàn)為PDF文檔設(shè)置和移除密碼

    在數(shù)字化時(shí)代,文檔的安全性變得越來越重要,特別是對(duì)于包含敏感信息的PDF文件,所以本文主要來和大家介紹一下如何使用Python實(shí)現(xiàn)為PDF文檔設(shè)置和移除密碼,需要的可以參考下
    2024-03-03
  • python matplotlib 繪圖 和 dpi對(duì)應(yīng)關(guān)系詳解

    python matplotlib 繪圖 和 dpi對(duì)應(yīng)關(guān)系詳解

    這篇文章主要介紹了python matplotlib 繪圖 和 dpi對(duì)應(yīng)關(guān)系詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 深入淺析python 協(xié)程與go協(xié)程的區(qū)別

    深入淺析python 協(xié)程與go協(xié)程的區(qū)別

    這篇文章主要介紹了python 協(xié)程與go協(xié)程的區(qū)別 ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • Python實(shí)現(xiàn)Linux監(jiān)控的方法

    Python實(shí)現(xiàn)Linux監(jiān)控的方法

    本文通過實(shí)例代碼給大家介紹了Python實(shí)現(xiàn)Linux監(jiān)控的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • 詳解基于Jupyter notebooks采用sklearn庫(kù)實(shí)現(xiàn)多元回歸方程編程

    詳解基于Jupyter notebooks采用sklearn庫(kù)實(shí)現(xiàn)多元回歸方程編程

    這篇文章主要介紹了詳解基于Jupyter notebooks采用sklearn庫(kù)實(shí)現(xiàn)多元回歸方程編程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Pytorch關(guān)于Dataset?的數(shù)據(jù)處理

    Pytorch關(guān)于Dataset?的數(shù)據(jù)處理

    這篇文章主要介紹了Pytorch關(guān)于Dataset?的數(shù)據(jù)處理,學(xué)習(xí)如何對(duì)卷積神經(jīng)網(wǎng)絡(luò)編程;首先,需要了解Pytorch對(duì)數(shù)據(jù)的使用,也是在我們模型流程中對(duì)數(shù)據(jù)的預(yù)處理部分,下面我們就一起進(jìn)入文章查看具體處理過程吧
    2021-12-12
  • 詳解Python中math和decimal模塊的解析與實(shí)踐

    詳解Python中math和decimal模塊的解析與實(shí)踐

    在Python中,math?和?decimal?模塊是處理數(shù)學(xué)運(yùn)算的重要工具,本文將深入探討這兩個(gè)模塊的基礎(chǔ)知識(shí),并通過實(shí)際的代碼示例演示它們的用法,希望對(duì)大家有所幫助
    2024-02-02

最新評(píng)論