• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于Python實(shí)現(xiàn)批量化處理的編程機(jī)制分析

    2023-01-01 00:00:00
    電腦迷 2023年6期

    【摘" 要】 人工智能下批量化處理Eexcl數(shù)據(jù)文件已成趨勢,文章從Python編程出發(fā)分析Openpyxl模塊的批量化處理邏輯,重點(diǎn)闡述了批量化處理Eexcl文件的思路與遇到的疑難雜癥,并從問題入手,分析了從操作單個(gè)工作表到操作多個(gè)工作表再到操作多個(gè)工作簿的工作表的方法和邏輯。

    【關(guān)鍵詞】 Openpyxl模塊;批量化處理;編程機(jī)制

    一、Python中的Openpyxl模塊

    (一)Python的邏輯存儲結(jié)構(gòu)

    Python可用于人工智能領(lǐng)域。所謂人工智能,通俗來說就是使計(jì)算機(jī)等設(shè)備延伸人類智力,模擬人類智能行為對外界作出響應(yīng)。Python善于處理批量的數(shù)據(jù),可以將工作者從大量繁瑣、機(jī)械的重復(fù)性工作中解脫出來,將注意力集中到更有價(jià)值的事情上。Python還可以用于辦公自動(dòng)化、測試自動(dòng)化、運(yùn)維自動(dòng)化等相關(guān)領(lǐng)域。

    (二)Excel文檔的邏輯存儲結(jié)構(gòu)

    在Eexcl文件當(dāng)中,最原始的數(shù)據(jù)存儲的邏輯關(guān)系為一對多的邏輯包含關(guān)系,即一個(gè)工作簿(Workbook)文件包含多個(gè)工作表(Sheet),一個(gè)工作表(Sheet)包含多個(gè)單元格(Cell),傳統(tǒng)的Eexcl表格只能操作當(dāng)前的這個(gè)工作表中的單元格,不能同時(shí)操作多個(gè)工作表以及多個(gè)工作表以下的單元格。

    (三)Openpyxl模塊

    Openpyxl是一個(gè)第三方庫,可以處理Excel文件的庫。Penpyxl模塊是一個(gè)讀寫Excel2010文檔的Python庫,綜合性較強(qiáng),能夠同時(shí)讀取(Read)和修改(Write)Excel文檔。Openpyxl模塊有三大類(首字母大寫)。主要的思路為:創(chuàng)建Excel文件→創(chuàng)建Sheet頁→寫入數(shù)據(jù),簡單來說,一個(gè)工作簿的底層存儲邏輯為字典,字典為鍵值對的存儲結(jié)構(gòu),由Key-Value的鍵值對進(jìn)行數(shù)據(jù)存儲,簡單包含來寫:Workbook—Sheet,Sheet—Cell,而每一層的數(shù)據(jù)結(jié)構(gòu)分別為字典—元組—列表(值)結(jié)構(gòu),字典是另一種可變?nèi)萜髂P?,且可存儲任意類型對象。字典的每個(gè)鍵值 Key:Value 對用冒號“:”分割,每個(gè)鍵值對之間用逗號“,”分割,整個(gè)字典包括在花括號“{}”中,格式:d={key1:value1,key2:value2};笛卡爾積中每一個(gè)元素(d1,d2,…,dn)叫作一個(gè)n元組(n-tuple)或簡稱元組。當(dāng)關(guān)系是一張表,二維表中的行表中的每行(即數(shù)據(jù)庫中的每條記錄)就是一個(gè)元組,每列就是一個(gè)屬性。在二維表里,元組也稱為記錄。

    二、批量化處理的編程邏輯

    (一)對單元格Cell的操作

    1. 讀取相關(guān)數(shù)據(jù)的方法,存儲為元組(Tuple)

    首先獲取每一行(row),從最小列(column)開始讀取,讀取的方法為for i in s.iter_rows(min_col=1),其存儲邏輯為一行一行的元組, Python中元組是有序且不可被修改的數(shù)據(jù)集合。通常使用小括號進(jìn)行定義元組,元組內(nèi)的元素之間使用逗號分隔。

    運(yùn)行截圖如下:

    根據(jù)運(yùn)行截圖可以清楚地看到,這個(gè)Eexcl表格中單元格Cell在Sheet1當(dāng)中,單元格的位置從A1-AX,B1-BX,C1-CX,D1-DX等。

    2. 針對每一行內(nèi)容進(jìn)行切片,獲取需要的單元格

    操作方法為根據(jù)得到的元組,將元組中需要的元素搜集起來,描寫的方法為rows[0],rows[1]…rows[x],從第一列到第X列,由于元組的地址從[0]開始,第一列的元素即為rows[0],其運(yùn)行截圖如下:

    根據(jù)運(yùn)行截圖可以清晰地看到相關(guān)的單元格列數(shù)已經(jīng)搜集起來,但是此處的問題是僅顯示了單元格,并沒有將里面的數(shù)據(jù)顯示出來。

    3. 顯示單元格的數(shù)據(jù),進(jìn)行數(shù)據(jù)篩選和合并

    若要完整顯示相關(guān)的數(shù)據(jù),還需要一步,即顯示單元格的數(shù)據(jù),方法為rows[0].value,其運(yùn)行截圖如下:

    此處只是單元格簡單顯示某一列的內(nèi)容,如果要對單元格的數(shù)據(jù)進(jìn)行篩選和分析,還需要運(yùn)用循環(huán)和條件If來進(jìn)行分析,分析的思路與方法如下:If條件,但是此處的If條件語句可以分析所有的數(shù)據(jù),前提是必須要把所需要的數(shù)據(jù)搜集起來。

    對單元格Cell的操作有三個(gè)主要特征:一是讀取每一行,然后獲取需要的列數(shù);二是根據(jù)所有的列數(shù),對需要的列數(shù)進(jìn)行切片,然后根據(jù)If條件判斷,獲取需要的值。

    案例:如何提取某部分值,再進(jìn)行篩選?將里面的姓名和觀看時(shí)間搜集起來,再進(jìn)行數(shù)據(jù)篩選:字符串切片。

    for rows in sheet.iter_rows(min_row=1):

    name=rows[0].value

    time=rows[2].value

    time_int=int(time[0:-2])

    if time_intlt;100:

    print(name,time_int)

    (二)對工作表Sheet的操作

    1. 操作單個(gè)工作表

    操作單個(gè)工作表的邏輯在于搜集起來所有的工作簿,由于工作簿的存儲邏輯為字典,字典的一個(gè)特定的含義即為鍵值對,那么就可以直接根據(jù)字典的邏輯獲取其單個(gè)工作表,寫法為工作簿名字[‘工作表名字’],即s=w['Sheet1'],其中w代表工作簿的命名;還有一種操作方法根據(jù)邏輯存儲結(jié)構(gòu)來獲取,即首先獲取所有的工作簿,再根據(jù)地址找到需要的工作簿,即所有工作簿名字[地址],寫法實(shí)例:w.worksheets[0],其中worksheets為Openpyxl里面固定的一個(gè)方法,目的便是獲取所有的工作簿。

    2. 同時(shí)操作多個(gè)工作表

    遍歷法即利用循環(huán)結(jié)構(gòu)將其需要的元素進(jìn)行一個(gè)個(gè)地搜集,在Python當(dāng)中可以利用for循環(huán)進(jìn)行工作表的搜集,寫法為for s_name in wb.sheetnames,將需要的內(nèi)容鑲嵌到這個(gè)庫當(dāng)中,即為For循環(huán)所有的Sheet表。

    圖中可以清楚地看到這個(gè)Eexcl表格中包含三個(gè)工作表,Sheet1是達(dá)州,Sheet2為成都,Sheet3為巴中,這三個(gè)工作表可以根據(jù)for循環(huán)的邏輯按照順序:Sheet1—Sheet2—Sheet3,這樣便可把所有需要的文件遍歷出來。

    案例:計(jì)算達(dá)州,巴中,成都第二行的總和。其主要代碼如下:

    for s_name in wb.sheetnames:

    sheet=wb[s_name]

    to=0

    for row in sheet.iter_rows(min_row=2):

    c=row[1]

    to=to+c.value

    print(s_name,to)

    其運(yùn)行截圖如下:

    解決問題的主要思路是遍歷Sheets的名字,將所有的Sheet表的名字找到相應(yīng)的Sheet表,再單獨(dú)操作不同的Sheet表,并且運(yùn)用相關(guān)的邏輯運(yùn)算方法把需要的單元格進(jìn)行操作來運(yùn)行一遍。此處主要運(yùn)用求和算法累加,利用一個(gè)新的變量To對需要的單元格的進(jìn)行累加求和,并將值搜集起來,在對需要的單元格進(jìn)行計(jì)算的時(shí)候仍然需要對單元格進(jìn)行遍歷,因?yàn)椴恢挂粋€(gè)單元格,需要將所有的單元格都梳理一遍再進(jìn)行運(yùn)算。

    (三)對工作簿W(wǎng)orkbook的操作

    1. 操作單個(gè)工作簿

    操作單個(gè)工作簿的邏輯與工作表一致,要學(xué)會(huì)打開不同的工作簿來進(jìn)行操作,打開工作簿進(jìn)行運(yùn)算的方法就是openpyxl.load_workbook(“文件名”),這個(gè)方法最大的問題在于容易文件打開出錯(cuò),其主要的原因在于,Python主程序必須與Eexcl文件邏輯放在同一菜單下,如果不在同一菜單,就無法對文件進(jìn)行操作。圈住的則為需要操作的Eexcl文件,下面的Test2則為Python中需要運(yùn)行的文件,可以清楚地看到,兩者在同一級別上,即在同一工程文件下的二級目錄,這樣的文件只需要一個(gè)寫法,便可輕易打開,其打開方法為openpyxl.load_workbook('collect.xlsx'),即調(diào)用openpyxl自帶的方法并且將其打開。

    2. 操作多個(gè)工作簿

    操作多個(gè)工作簿最大的問題在于必須解決多個(gè)工作簿不在同一路徑的問題,如果在同一路徑下,那么只能打開一個(gè)工作簿,即要解決不同的路徑問題,需要在此處引入一個(gè)Python自帶的路徑庫,即Os與Is對文件進(jìn)行操作的庫,這個(gè)路徑庫為os.path。首先需要將這個(gè)包導(dǎo)入,導(dǎo)入以后就可以打開不同的文件庫了,打開方法為:os.path.join(“一級文件”“二級文件”“X級文件”),根據(jù)這個(gè)方法就可以很便利地將任意目錄的文件打開。此處可以將需要操作的Eexcl文件放在一個(gè)文件夾下面,然后再打開這個(gè)文件夾,操作下面的Eexcl文件。有了文件夾即可以對需要的文件進(jìn)行數(shù)據(jù)處理與操作了,方法也是利用For循環(huán)遍歷文件夾的工作簿,然后再遍歷工作簿下面不同的工作表,即可以將所有需要操作的Eexcl表格進(jìn)行批量化處理與實(shí)踐。其運(yùn)行截圖如下:

    其主要代碼如下:

    di_path=os.path.join(“新建文件夾”)

    #獲取所有目錄的名字:

    for dir_name in os.listdir(di_path):

    path=os.path.join(di_path,dir_name)

    wb=openpyxl.load_workbook(path)

    根據(jù)以上的程序可以清楚地看見,首先獲取文件夾,然后獲取所有文件夾下面Eexcl工作簿的名字,根據(jù)名字將其路徑連接起來,最后再根據(jù)循環(huán)結(jié)構(gòu)遍歷所有的文件內(nèi)容,這樣就可以將所有的Eexcl文件進(jìn)行批量化處理了。

    三、結(jié)語

    Openpyxl模塊對于批量化處理的優(yōu)勢在于根據(jù)Eexcl文件的操作與Openpyxl模塊的內(nèi)部存儲機(jī)制一一對應(yīng),將不同存儲邏輯下的Eexcl文件進(jìn)行搜集與分析,對Eexcl文件進(jìn)行詳細(xì)的梳理與分析,簡單來說,Openpyxl模塊就是專門為Eexcl設(shè)計(jì)的進(jìn)行批量化處理的最優(yōu)解,原因在于Workbook工作簿包含Sheet表,Sheet表又包含Cell(單元格),與Eexcl的內(nèi)在存儲機(jī)制一一對應(yīng),從而實(shí)現(xiàn)Eexcl文件的智能化處理。

    參考文獻(xiàn):

    [1] 孟麗,王慶芳. 計(jì)算機(jī)技術(shù)在辦公自動(dòng)化中的應(yīng)用[J]. 中國高新科技,2023(01):123-125.

    [2] 劉靜,王鳳,孟星,等. Python在數(shù)據(jù)可視化中的應(yīng)用案例分析[J]. 電子技術(shù),2023,52(05):391-393.

    [3] 汪凡. 計(jì)算機(jī)技術(shù)在辦公自動(dòng)化中的應(yīng)用探究[J]. 軟件,2021,42(08):110-112+134.

    江达县| 桑植县| 江达县| 呼图壁县| 靖州| 卓资县| 满洲里市| 崇明县| 吉安县| 河源市| 三原县| 彩票| 广灵县| 通化县| 庆元县| 诏安县| 卫辉市| 寻乌县| 沈丘县| 当阳市| 邹城市| 五大连池市| 嘉义市| 手游| 吴堡县| 福建省| 山东省| 卢湾区| 姚安县| 武邑县| 治县。| 鄂托克前旗| 新民市| 合川市| 辉县市| 阳春市| 中山市| 壶关县| 勃利县| 黑山县| 叶城县|