喲,明天上完班就端午放假了。淡定整理下今天所學。
遇到一個場景,需要一大段字符串,中間以空格間隔,有單空格,也有多空格,想要以空格分割字符串,一開始就能想到的當然是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)