周佳,周志輝
(上汽通用汽車有限公司,上海 201206)
Python 是荷蘭人Guido van Rossum 在1989 年圣誕節期間編寫的一種編程語言。現在,全世界差不多有600 多種編程語言,但流行的編程語言也只有十幾種。下面的圖1 列表基于源自TIOBE 編程社區指數的數據,該指數是表明近兩年中編程語言受歡迎程度的常用指標:

圖1 2019 年和2018 年編程語言占有率排名
過去15 年來,Python 的受歡迎程度穩步上升。過去這幾年,它一直能夠躋身TIOBE 指數前5 名的位置。作為如今人工智能、機器學習、大數據和機器人等一些最有前途的技術背后的主要語言,Python 近年來積累了龐大的粉絲群。你會驚訝地發現,學習Python 很容易,這就是為什么不論初出茅廬的新手程序員還是經驗豐富的開發人員選擇Python作為第二或第三語言的原因。
“Python 的語法是非常精簡的,對于一位完美主義者來說,Python 將是他愛不釋手的伙伴。Python 社區的目標就是構造完美的Python 語言!本文將使用Python3 來進行講解。”
當用一種編程語言開始真正的解決工作中的問題時,除了編寫代碼外,還需要很多基本的已經寫好的現成的東西,來協助加快開發進度。比如,要編寫一個電子郵件客戶端,如果先從最底層開始編寫網絡協議相關的代碼,那估計一年半載也開發不出來。高級編程語言通常都會提供一個比較完善的基礎代碼庫,可以直接調用,比如,針對電子郵件協議的SMTP 庫,針對桌面環境的GUI 庫,在這些已有的代碼庫的基礎上開發,一個電子郵件客戶端幾天就能開發出來。
Python 就為我們提供了非常完善的基礎代碼庫,覆蓋了網絡、文件、GUI、數據庫、文本等大量內容,被形象地稱作“內置電池(batteries included)”。用Python 開發,許多功能不必從零編寫,直接使用現成的即可。除了內置的庫外,Python 還有大量的第三方庫,也就是別人開發的,供你直接使用的東西。當然,如果你開發的代碼通過很好的封裝,也可以作為第三方庫給別人使用。
許多大型網站就是用Python 開發的,例如YouTube、Instagram,還有國內的豆瓣。很多大公司,包括Google、Yahoo 等,甚至NASA(美國航空航天局)都大量地使用Python。Python 的定位是“優雅”“明確”“簡單”,所以Python 程序看上去總是簡單易懂,初學者學Python,不但入門容易,而且將來深入下去,可以編寫那些非常復雜的程序。
以此案例介紹Python 如何處理Excel 文件標準格式產品配置報價,當然Excel 自定義宏也可以實現部分類似功能,只不過在這個案例中我們用Python 程序顯得更簡單、效率更高,且具有可復制性、可擴展性。

圖2 機器人報價清單
圖2 所示為需要處理的機器人配置表格,經過Python程序處理自動輸出的報價表(價格已經過脫敏處理)。以往200 臺工業機器人選型配置往往需要耗費大量的人工工時來分類篩選并填寫價格,用時1 ~3 小時不等,但Python 從輸入模板到輸出結果,總共時間不超過5s,大大縮短了報價所需的時間,同時避免了人為操作失誤。
這里用到一個Python 第三方庫Openpyxl,我們簡單介紹一下,Openpyxl 誕生源于現有的庫,用于讀取/寫入Excel 2010 XLSX/XLSM/XLTX/XLTM 文件。
程序的思路和代碼的順序并沒有直接的關聯,以下我們主要講解自動報價程序的實現思路:
首先,機器人采購配置清單是一個標準的Excel 文件模板,機器人報價清單則是另一個標準的Excel 文件模板,所以需要先將機器人采購配置清單中和價格有關的配置選項拷貝至機器人報價清單。
其次,定義每種配置數據對應的價格,加上判斷的邏輯,利用for…in…語句逐行判斷并填寫相應的價格數值到對應的列表單元,隨后保存新文件。
最后,需要檢查并調試程序BUG,完成封裝后可共享給他人使用。
用此案例來介紹Python 如何批量下載程序,當然市面上不乏有這樣的軟件,但是這些軟件不僅需要開發時間及費用,還需要不同崗位的專家大量測試配合。作為業余的程序員,完全可以一個人運用Python 來實現此項功能。
圖3 所示為Python 程序運行后自動輸出的備份文件。以往的普通備份操作需要花大量的人工和時間,而使用此Python 程序自動運行2 分鐘即可,完成1 臺機器人程序備份。

圖3 機器人備份文件
這里先介紹一下代碼中使用到的第三方庫。第一個是ftplib,它是 Python 的內置的一個標準模塊,它提供了對FTP 服務端的操作功能,通過它我們可以連接并操作FTP 服務端。第二個是socket,用來設置IP 地址訪問超時等待時間。第三個是os,它也是Python 的內置的一個標準模塊,可以用來處理windows 系統操作,如創建文件夾、刪除文件等。最后是Openpyxl,上一節中也使用過,用于讀取/寫入Excel 文件。
程序的思路和代碼的執行順序并沒有直接的聯系,以下我們主要講解自動備份程序的實現思路:
首先,我們需要插入將要用到的所有第三方庫os、ftplib、socket、openpyxl,并創建一個下載文件的總文件夾。
其次,check_Excel_sheet()函數用來讀取輸入模板中的sheet,get_IP()函數用來讀取輸入模板中的sheet 中的IP 地址,并且初步篩選出填寫格式正確的IP 地址,錯誤的IP 地址則會在后一列填寫報錯代碼以示區別,openpyxl 具體使用方法請參考官方說明手冊。
最后,load_files(each_IP)函數中會逐個連接之前讀取到的IP 地址,根據IP 地址創建子文件夾并且批量下載文件。
最終主程序把各個自定義函數串聯起來,并做了防錯/跳過程序處理,防止程序卡死,至此即完成任務。主程序結構代碼如下:
if __name__ == ‘__main__’:
check_ID()
check_Excel_sheet()
step0 = get_IP()
print(step0)
for each_IP in step0:
print(each_IP,’備份ing...’)
try:
load_files(each_IP)
print(each_IP,’備份下載成功’)
except:
print(each_IP,’備份下載失敗或下載文件不全,請檢查網絡’)
#test = input(‘下載失敗是否繼續下一個Y/N:’)
message_f = r’D:/robot_backup’ + ‘/IP’ + each_IP + ‘備份下載失敗或下載文件不全’
os.mkdir(message_f)
end = input(‘是否結束程序Y/N:’)
完成相同的一個任務,使用匯編語言需要1000 行代碼,使用C 語言需要500 行代碼,使用Java 只需要100 行,而使用Python,可能只需要20 行就可以了。這就是Python,即使你沒有任何編程基礎,仍然可以很快上手并且利用它提高自己的工作效率。其主要的使用思路可以大致分為四步。第一步,思考工作中計算機使用時的痛點,難點或重復勞動的繁重內容,思考如何使用Python 解決問題或提升效率。第二步,要相信方法總比問題多,一步登天對大多數人而言畢竟難度較大,所以把大問題拆分成分散的小問題,逐個擊破,最后一氣呵成攻下難關。第三步,學會利用網絡上的各種共享資源,不斷學習,也許你思考的問題前人已有總結并分享,這樣就可以大大節約你的編程時間,有些第三方庫并不需要學很深,只需要了解能幫助你解決問題的功能或模塊即可。第四步,在測試程序的過程中發現問題,及時修正程序并添加注解,不斷完善,避免3 個月后再回來看程序時一臉茫然。
做好以上四步,對于初學者來說,足以開發一些小程序解決部分工作上的問題。
本文是在汽車行業中機器人工程師的角度思考并編程解決問題。其實Python 能應用的場景遠不止于此,以下是關于Python 在各行各業(非計算機專業)中應用的一些構想。
設備工程師:利用Python 監控、抓取設備關鍵參數,按照特定的算法、權重做可視化分析故障率,提前預知設備停機風險。
網絡編輯:利用Python 檢索網絡大數據,篩選關鍵字,精致定位相關文章,批量下載圖片。
培訓師:利用Python 科學庫把數據生成智能分析圖,提高說服力。
“操作文本或者數據是件大事。如果不相信,就仔細看看當今的計算機都在做些什么工作:文字處理、網頁表單的填寫、來自數據庫轉儲的信息流、股票報價信息、新聞源,而且這個清單還會不斷增長”。本文基于Python3 軟件,介紹了Python 及其各種第三方庫在汽車行業機器人工程師手中的實際應用案例。希望通過Python 各種成熟的庫及精簡的語句,為提升工作效率、解決工作中碰到的難點、痛點提供更多高效、簡便的途徑。