【工作日記8】

喲,明天上完班就端午放假了。淡定整理下今天所學。

遇到一個場景,需要一大段字符串,中間以空格間隔,有單空格,也有多空格,想要以空格分割字符串,一開始就能想到的當然是python字符串分割的split函數,

但是我需要最後那兩個字符串不分割,那就需要指定分割次數了,指定次數時,就不能不指定分割符了,不然會報錯

指定空格符呢

又只分割單個空格符

查了下,還有種用法

 list(filter(None,str.split(" ")))  

但是這樣效果也不是想要的

想要結果爲

['ssss', '12111', 'dddd', '3fd3', 'rewr324', 'dgggg', 'j675hgg rfesf']

簡單的方法還沒想到,麻煩的方法就i是分割後再連接,這種方法感覺就太麻煩了。先記錄下,之後再查查。

 

昨天使用openpyxl讀寫文件,但是好像沒有直接的接口能追加寫入xlsx文件的。沒找到接口,還是自己寫個吧,思路是:

遍歷當前xlsx文件每個單元格並記錄位置,再次寫入,然後再寫入新增的數據,最後保存。這種方法感覺數據量不大還行,數據量大遍歷完就太浪費時間了,不知道有沒有更好的辦法。

from openpyxl import Workbook,load_workbook



def openxl_write(time,free_all):
    #如果表不存在,則創建Workbook;存在則導入:
    #wb = Workbook() #表不存在,創建
    wb = load_workbook('result_test.xlsx')#表存在,導入
    #創建和使用sheet
    #ws1 = wb.create_sheet("free_test") # 默認在最後新建sheet
    #ws3 = wb.create_sheet("Mysheet", 0) # 在第一個新建sheet
    ws3 = wb['Mysheet']# 如果表裏面存在sheet,則可使用該sheet
    #ws3['A1'] = 234 #通過worksheet的key
    #ws.cell(row=1, column=3).value = 123 #通過行列確定一個cell


    '''
    ws3.cell(row=1, column=max_column+1).value = time_now 
    for key,value in free_all.items():
        ws3.cell(row=max_row+1, column=1).value = key 
        ws3.cell(row=max_row+1, column=max_column+1).value = value
        max_row=max_row+1
    '''

    #去讀原有數據並寫入
    row_num = 0
    
    for row in ws3.rows:
        row_num = row_num + 1
        count = 0

        column_num = 0
        for cell in row:
            column_num = column_num + 1
            count = count + 1
            print(cell.value, end='\t')
            print(row_num,column_num)
            ws3.cell(row=row_num, column=column_num).value = cell.value
            if count == len(row):
                print()
    max_row = ws3.max_row
    max_column = ws3.max_column
    print(max_column,max_row)
    ws3.cell(row=max_row+1, column=1).value = time_now

    #插入新數據
    for key,value in free_all.items():  
        row_num = 0

        for row in ws3.rows:
            row_num = row_num + 1
            column_num = 0
            for cell in row:
                column_num = column_num + 1
                #print(value,ws3.cell(row=row_num, column=column_num).value)
                if  key == ws3.cell(row=row_num, column=column_num).value:
                #如果該進程在第一行已存在進程,則不新增一列
                    value_column =  column_num
                    break
            else:
                value_column = max_column + 1  #如果該進程不在第一行已存在進程,則新增一列
                ws3.cell(row=1, column=value_column).value = key
                max_column=max_column+1
            break #只需要迭代第一行,獲取已存在進程所在列數
        
        ws3.cell(row=max_row+1, column=value_column).value = value
            
            
    wb.save('result_test.xlsx') #可取不同文件名 



if __name__ == "__main__":
    time_now = "22:36"  #根據time所在的列來定位進程內存所需要插入的列
    free_all={"gwportal_svr.lua":4136,"boa":5556,"dhcpd":4506} #進程名和內存
    openxl_write(time_now,free_all)

    

 

 

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