Python熱門,全球Python使用者佔據IT行業程式語言的2/3領域
1946年,世界上第一臺通用計算機“ENIAC”在美國賓夕法尼亞大學誕生;“ENIAC”佔地170平方米,重達30噸,耗電功率約150千瓦,每秒鐘可進行5000次運算,這個龐然大物用於美國國防部進行彈道計算。
在當時,計算機只是被用於了特殊部門。現如今已過60餘年,人類在計算機發展程序中越走越遠,技術的發展使價格越加便宜,體積也更加便於攜帶,計算機隨之出現在了各行各業之中。在第47期《中國網際網路絡發展狀況統計報告》中提到,截至2020年12月,中國網民數量達到9。89億,網際網路普及率達到70。4%,如此多的使用者必然有著巨大的商業市場,所需要的計算機應用程式也越加多樣,那麼創造這些計算機應用程式就需要進行程式編寫。
在計算機中,編寫程式需要使用計算機程式語言,由於種類及針對性不同,計算機語言存在上百種,那對於目前日益複雜的辦公需求,到底什麼語言才可以提高我們的辦公效率呢?如今有了一個答案,這個熱門的語言叫做 python,python 擁有著眾多的第三方庫,或者說這些庫就是已經實現好的功能,正等著你去使用它,完成你需要的定製功能;我們只需要學會 python 基礎語法,既可以在辦公中提高自己的工作效率。
這篇文章將會模擬解決你將來在職場中遇到的 10 個辦公需求為主要內容,帶各位同學感受 python 的魅力;當然,各位同學也可以從本篇文中直接得到這 10 個問題解決辦法。本篇文將要解決的 10 個辦公需求如下:
老闆叫我從一堆文字資訊中提取出手機號碼,我改如何去做?
領導叫我將第一天提取的電話號碼儲存到 Excel 中,我是如何快速解決的。
文字中提取郵箱了,給了我一天時間,但我玩了半天才開始進行資訊提取。
給了我一堆圖片,讓我加上公司水印。
前同事的電腦中太多重複檔案,領導讓我清理重複檔案精簡資訊。
領導跟我說數一下這個文字到底有多少箇中文字元。
幫助美工小姐姐將網址生成二維碼圖片。
如何將圖片生成 gif?我手到擒來。
人事急匆匆的找到我讓我急忙翻譯一份英文文件,我立馬答應下來。
提取影片的音訊資訊並且升職加薪!
上班的第一天
上班第一天,你的上級給你一堆文字檔案,叫你去提取出手機號碼。如果是常規的辦公人員,獲取資訊會一個個的去文字中查詢,但在如今計算機深度普及的時代,顯然提高辦公效率解放自身才是更好的選擇;那麼這時,就讓 python 祝你一臂之力,在職場騰飛吧。
首先我們可以考慮,文字檔案為 txt 的字尾檔案,這個文字檔案第一件事情則是需要讀取;讀取文字資訊需要使用 python 的 open 函式,此時建立一個 python 檔名為 day1。py 編寫一個函式名為 get_str,傳入引數為需要讀取到的檔案路徑,該函式返回讀取到的內容,函式程式碼如下:
#讀取目標文字檔案:
def get_str(path):
f = open(path,encoding=“utf-8”)
data = f。read()
f。close()
return data
此時已經編寫好了讀取文字內容函式,那麼接下來就應該需要在這個讀取到的值之中提取電話號碼,提取電話號碼使用正則,在此不過多說明正則的使用用法;使用正則我們需要使用 re模組;引入 re 模組後,呼叫 re 模組的 findall 方法對電話號碼進行讀取,然後進行返回:
import re
#正則獲取文字號碼
def get_phone_number(str): res=re。findall(r‘(13\d{9}|14[5|7]\d{8}|15\d{9}|166{\d{8}|17[3|6|7]{\d{8}|18\d{9})’, str)
return res
那麼最後一步就還剩儲存資訊。儲存資訊建立一個函式名為 save_res,傳入兩個引數分別是提取號碼的結果以及儲存檔案的路徑,之後遍歷結果使用 write 方法寫入即可,該函式程式碼如下:
#儲存得到號碼
def save_res(res,save_path):
save_file = open(save_path, ‘w’)
for phone in res:
save_file。write(phone)
save_file。write(‘\n’)
save_file。write(‘\n號碼共計:’+str(len(res)))
save_file。close()
print(‘號碼讀取OK,號碼共計:’+str(len(res)))
那麼最後一步就還剩如何如何呼叫已建立的程式碼。此時使用 input 接收兩個輸入值;一個為需要讀取的目標檔案路徑,另一個為需要儲存結果的檔案路徑,之後依次呼叫函式即可,程式碼如下:
path=input(“請輸入檔案路徑:”)
save_path=input(“請輸入檔案儲存路徑:”)
#read_str=get_str(path)
res=get_phone_number(get_str(path))
save_res(res,save_path)
此時我們建立 1 個 txt 檔案用於測試,檔名及字尾為 phone。txt,內容為:
張三:15888888888
李四:15888888888
王五:15888888888
草帽:15888888888
柳葉:15888888888
接下來在 DOS 中執行 python 檔案 day1,輸入檔案儲存路徑以及儲存路徑,當完成資訊提取後將會有提示:
此時到儲存的檔案 res。txt 檢視,發現電話號碼資訊已經被提取:
此時第一天的工作輕鬆搞定,並且還可以把指令碼分享給同事,提高自己的形象,豈不美哉?
上班的第二天
上班第二天,新分配給你的任務是將第一天的 phone。txt 文字使用 Excel 儲存,此時如果該文字是上萬條資訊,可能你獨自手動操作將會耗時非常久才能完成這個任務,並且大機率有遺漏。這時使用 python 進行自動化操作將會極大的減少你操作的時間,並且在程式正確的情況下遺漏資料機率極低。那 python 是否可以勝任第二天的功能呢?答案當然是“能!”。
python 有一個第三方庫叫做 xlwt,透過 xlwt 可以自動將資料儲存到 Excel 檔案中,接下來我們來看一下具體如何解決。
首先建立一個 python 檔名為 day2。py,在頭部引入 xlwt:
import xlwt
由於我們當前所需要的資料是第一天任務用到的,在這裡我們繼續使用第一天所用使用到的 get_str 函式:
#讀取目標文字檔案
接著我們建立一個函式名為 save_excel,該函式功能包括了儲存檔案、設定 sheet 名、設定列名以及設定列值。save_excel 函式接收 4 個引數,分別為 save_path、sheetname、column_name_list、content。首先我們在函式內建立一個 Workbook 物件:
def save_excel(save_path,sheetname,column_name_list,read_list):
workbook = xlwt。Workbook()
接著在函式體中使用 add_sheet 增加一個 sheet,add_sheet 函式接收一個引數為 sheet 名稱,我們將接收的 sheetname 引數作為 sheetname 的值,add_sheet 函式將會返回建立的這個 sheet 物件,程式碼寫為:
sheet1 = workbook。add_sheet(sheetname=sheetname)
接收完引數後,我們可以使用 for 迴圈將傳遞過來的列名 column_name_list 在該 sheet 上進行設定:
for i in range(0,len(column_name_list)):
sheet1。write(0,i,column_name_list[i])
以上程式碼中 write 方法第一個引數為 sheet 的第幾行,這裡為 0 即為最開始的一行;引數 i 為第幾列,由於 i 是從 0 開始到當前列元素長度位置進行對 column_name_list 的遍歷,此時則是從 0 到 column_name_list 的最後一個元素,那麼將會從最開頭的列到對應最尾的列,則將所有列名填寫值 sheet 頁頭部。
接著就應該為這些列設定元素了。此時遍歷傳遞過來的 read_list,read_list 為這些列的具體內容,例如姓名與電話號碼。此時遍歷 read_list 由於原始資料每一行將會是以 : 作為姓名與電話分隔,例如 “張三:15888888888”,這時遍歷 read_list 列表應該將值再進行分隔,以列名設定同理進行賦值,在此不再贅述,程式碼如下:
i=1
for v in read_list:
kval=v。split(‘:’)
for j in range(0,len(kval)):
sheet1。write(i+1,j,kval[j])
print(kval[j])
i=i+1
最後使用 workbook 物件呼叫 save 方法,傳遞儲存地址即可。那麼改 save_excel 自定義函式完整程式碼如下:
#儲存為Excel檔案
def save_excel(save_path,sheetname,column_name_list,read_list):
workbook。save(save_path)
print(‘資訊儲存 OK,記錄條數共計:’+str(len(read_list)))
此時已經完成了主要功能的編寫,那麼接下來就應該接受使用者輸入 檔案路徑、檔案儲存路徑、sheetname、列名 以及對原始資料用換行符 “\n” 作為列表分隔符,呼叫部分完整程式碼如下:
sheet_name=input(“請輸入sheetname:”)
column_name=input(“請輸入列名,並且使用英文逗號隔開:”)
column_name_list=column_name。split(‘,’)
read_str=get_str(path)
read_list=read_str。split(‘\n’)
save_excel(save_path,sheet_name,column_name_list,read_list)
此時執行 day2。py 檔案,輸入完所需內容將會出現成功提示:
隨後在儲存的檔案中可以看到提取出來的資訊:
上班的第三天
時間到了第三天,第三天領導給你的任務是從文字中提取郵箱,這個任務跟第一個任務差不多,我們只需要替換正則即可完成任務。建立一個 python 檔名為 day3。py,day3。py 所有完整程式碼如下:
#正則獲取目標資訊
def get_re_str(str):
res = re。findall(r‘^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\。[a-zA-Z0-9_-]+)+$’, str)
#儲存得到的資訊
print(‘資訊讀取OK,資訊共計:’+str(len(res)))
res=get_re_str(get_str(path))
在以上程式碼中,我們為了函式功能與名稱對應,修改了部分函式名以及必要的正則資訊,在此我們就已經知道,如果從一個文字中提取出常用資訊只需要修改對應的正則即可,不會寫正則我們可以搜尋引擎搜尋,直接替換即可完成該功能;在這裡,郵箱的正則為 ‘^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\。[a-zA-Z0-9_-]+)+$’。我們此時執行該檔案,填上必要的輸入資訊即可取出對應文字中的郵件文字資訊。
上班的第四天
今天是第四天,你在前三天都做的很不錯,自然而然你的上級將會更加看重你。此時你的上級給了你一個G大小的壓縮包,告訴你裡面的圖片都需要新增水印,此時你該如何實現這個功能呢?當然可以透過其他軟體付費,但是自己大機率是會墊付這幾十塊錢,既然已經學會了 python 完成了部分任務,那麼就應該去尋找一下 python 是否有相關的支援庫。如果你已經開始尋找相關的 python 支援,我可以告訴你“恭喜!你的想法非常正確”。使用 python 的 opencv 庫即可完成這個操作。
安裝好 opencv 庫後,匯入 opencv 庫並且引入 os,因為我們將對某一個資料夾下的檔案進行批次水印操作,會涉及到目錄檔案讀取:
import cv2
import os
接下來根據使用者輸入路徑確定需要操作的目錄下圖片:
path=input(“請輸入需要加水印的資料夾路徑:”)
接著獲取目錄下所有檔案:
file_list = os。listdir(path)
最後迴圈遍歷每一份圖片,使用 imread 方法讀取圖片獲得該圖片物件,並且使用 putText 方法為該圖片物件新增水印資訊,水印資訊引數已在註釋中說明,最後再使用 imwrite 方法儲存圖片即可:
for filename in file_list:
img1 = cv2。imread(path+filename,cv2。IMREAD_COLOR)
cv2。putText(img1,‘CSDN’,(10,10) , 1, 1, (255,255,255),1) #圖片,文字,位置,字型,字號,顏色,厚度
cv2。imwrite(path+filename, img1)
上班的第五天
你在公司已經小有名氣,這時你的上級領導跟你說“你上一位同事的電腦中太多重複檔案,匯出檔案過多,需要刪除重複檔案”;這時你得到了這個任務,那如何去刪除重複檔案呢?沒錯,是使用檔案的 md5 值進行對照,相同檔案的 md5 值一樣,只需要遍歷該目錄的檔案 md5 值,若出現重複 md5 則刪除該檔案即可。
第一步匯入兩個模組,其中 hashlib 作為 md5 計算所需的模組:
import hashlib,os
接著編寫一個函式,需要傳入一個檔案路徑,從而獲取這個檔案的 md5:
def getMD5(filepath):
f = open(filepath,‘rb’)
md5obj = hashlib。md5()
md5obj。update(f。read())
hash = md5obj。hexdigest()
return str(hash)。upper()
以上程式碼中,hashlib。md5() 為獲取一個 md5 加密物件,md5obj。update() 為指定加密的資訊,最後 md5obj。hexdigest() 獲取加密後的 16 進位制字串,此時就可以得到 md5 加密後的 16 進位制了,最後將其返回。接著我們就需要請使用者輸入需要過濾重複檔案的目錄:
path=input(“請輸入需要重複檔案過濾資料夾路徑:”)
隨後獲取目錄下的檔案資訊,並且建立一個列表記錄 md5 值:
file_md5=[]
接著使用 for 迴圈對指定目錄進行遍歷:
md5val=getMD5(path+filename)
if md5val in file_md5:
os。remove(path+filename)
else:
file_md5。append(md5val)
print(“處理完畢。。。”)
以上程式碼中呼叫 getMD5 方法獲取檔案的 md5 值,隨後判斷該 md5 值是否在記錄列表中,如果在則使用 os 的 remove 方法移除該檔案,否則就將記錄該 md5 值,這樣就實現了重複檔案刪除的操作。
執行程式輸入目錄後將清理完重複檔案:
上班的第六天
今天你的領導跟你說,需要讀取作者的中文字數,以便於給予發放稿費,但是隻能算中文字元;由於之前據說是讓實習生慢慢數的,所以希望你能夠加快數中文字元的速度。
當然,對於用了幾天 python 的你來說自然難不到,這是一個很簡單的操作。需要完成這個需求很簡單,我們需要用到 python 兩個模組,一個是 os 另一個是 re;os 用於讀取文字資訊,re 用於判斷中文字元,我們先建立一個函式名為 get_str 接收文字路徑作為引數,然後返回文字資訊;由於這段時間都是使用這個函式,具體的解釋並不過多贅述,函式實現如下:
f = open(path)
接下來依舊是輸入目標路徑程式碼:
接著,我們只需要使用 re 模組中的 findall 方法即可提取,我們在 findall 方法中指定中文字元的範圍為 \u4e00-\u9fa5 即可:
word=re。findall(‘([\u4e00-\u9fa5])’,get_str(path))
print(“中文字元,除特殊字元外共:”,len(word))
最後我們把需要技術的內容複製到一個文字中,執行指令碼,結果如下:
上班的第七天
今天美工小姐姐跟你說,製作海報需要官網的二維碼,可是她不知道去哪得到,非常需要你的幫助,你跟她說讓她稍等片刻馬上傳送給她。那,你是怎麼實現的呢?
在 python 中有個庫叫做 qrcode,qrcode可以直接生成指定 url 的二維碼,首先引入 qrcode 庫。
import qrcode
接著設定你所需要建立二維碼的具體資訊,例如大小、尺寸、容錯等,程式碼及註釋如下:
qr = qrcode。QRCode(
version=2,#尺寸
error_correction=qrcode。constants。ERROR_CORRECT_L,#容錯資訊當前為 7% 容錯
box_size=10,#每個格子的畫素大小
border=1#邊框格子寬度
)#設定二維碼的大小
接著指定 url、生成二維碼圖片最後進行儲存即可:
qr。add_data(“https://www。lebo。net/”)#指定 url
img = qr。make_image()#生成二維碼圖片
img。save(“F:\work\day7\csdn。png”)#儲存
執行指令碼這時 lebo 官網連結就生成了:
上班的第八天
上班第八天來了,你的技巧贏得了領導、同事的肯定,同事小王跟你說要你製作一個 gif 圖片,他不懂怎麼去做,但是有多張圖片,你一口答應下來;小王給了你一個資料夾,資料夾中有按序號排列的圖片,你需要按照需要進行動圖製作。為了介紹方便,我們以以下兩張圖為例:
此時所需要的 python 庫為 imageio,使用 imageio 可方便的使多張圖片生成 gif 圖。首先我們需要一個列表儲存圖片路徑,此處為了方便演示,直接使用列表作為儲存,並且建立一個變數為圖片的儲存路徑:
import imageio
image_list = [r‘F:\work\day4\1。png’, r‘F:\work\day4\2。png’]
gif_name = r‘F:\work\day4\gif。gif’
接下來建立一個列表儲存讀取後的圖片資訊,方便合成 gif 圖片:
frames = []
接著遍歷圖片路徑,隨後使用 imageio 的 imread 方法讀取圖片新增到 frames 列表之中:
for image_name in image_list:
frames。append(imageio。imread(image_name))
接下來使用 imageio 的 mimsave 方法傳入 gif_name 儲存路徑資訊、frames 圖片資訊、‘GIF’ 生成圖片型別以及 gif 圖的切換秒數 duration 引數為 2:
imageio。mimsave(gif_name, frames, ‘GIF’, duration=2)
上班的第九天
第九天到來,今天一早人事跟你說需要你翻譯一份文件成中文,不需要質量太好但是一定要快速。你依舊一口應下,那麼你的自信來源於哪呢?當然是來源於 python 的強大。python 中有一個庫叫做 translate 可以直接翻譯英文文字,我們首先引入該庫:
from translate import Translator
隨後設定翻譯的語言型別:
translator = Translator(to_lang=“Chinese”)
接著設定翻譯的語言文字,在此我們建立一個函式直接獲取文字資訊:
接著要求使用者輸入檔案路徑並且獲得檔案文字:
text=get_str(path)
文字資訊為:
Virtual Group Coaching: How to Improve Group Relationships in Remote Work Settings
最關鍵的一步,我們將文字拿去 translate 方法中進行翻譯,最後輸出:
translation = translator。translate(text)
print(translation)
我們最後執行指令碼,得到結果:
上班的第十天
上班第十天成功轉正並升職
第十天,今天領導給了你一個影片檔案,希望你能夠提取出音訊,他對你非常看重,並且跟你說過完今天轉正後提前升職加薪,你也是非常興奮,當場3句程式碼直接提取出了指定影片的音訊。
python 對影片進行操作可以使用 moviepy 庫,第一步引入 moviepy:
from moviepy。editor import AudioFileClip
隨後使用 AudioFileClip 獲取影片資訊:
my_audio_clip = AudioFileClip(“E:\PyVedio\py02。mp4”)
最後直接使用 方法將影片的音訊寫入到檔案之中:
my_audio_clip。write_audiofile(“E:\PyVedio\py02。wav”)
看完了 python 那麼多的“神奇”妙用,你還不趕緊用於辦公嗎?當下社會對辦公效率的要求日益加深,合理的運用一門程式語言進行高效的辦公是突出個人能力的途徑之一。
python 作為當下最流行的語言之一,擁有許許多多強大的第三庫支援,在辦公領域方面應用得當將會祝你在職場中斬荊披棘、突破自我。