是時候學習python了


 

 學習Pyhton,如何學以致用 -- 知識往問題靠,問題往知識靠

 

 

 

 

 

 

 

01

為什么學Python

        一直有聽說Python神奇,總是想學,雖然不知道為啥。奈何每天寫bug,修bug忙得不亦樂乎,總是不得閑。直到有一次與湯哥聊一個數據修復方案時,我只能說出用excel,而領導卻說用Python可以非常方便時,我知道是時候學習Python了。於是有了這篇短文。

 

02

Hello World

 

        有一個關注程序員的笑話:程序員退休后,學寫毛筆字,身體端坐,鋪好宣紙,墨入硯台,毛筆蘸墨,突然不知如何下筆,苦思良久,寫了二字:hello world 。這看似滑稽,確也道出我們程序員是真真的實干派。接下來我們按學習新技能 的標准SOP: code 三部曲   -- 環境,文檔, hello world 開始我的文章。

 

      運行環境百度一下,你就知道了。如果是mac,使用推薦使用 homebrew ,一條命令搞定(如果提示 upgrading ...  直接ctrl+c 就開始安裝了),輸入python3 / python 看到如下結果就表示 ready了(我的電腦上安裝了兩個版本)。

 

 

 

       到這里本來已經可以開始使用vi碼代碼了,看着還very cool,但發現自己過了那個年紀,idea 裝個pyhon 插件十分實用,如下圖。智能提示,快速運行,查看結果,實用才香。

 

 

        開發環境准備就緒,接下來推薦一個入門文檔:https://www.liaoxuefeng.com/wiki/1016959663602400, 廖雪峰出品,真心不錯。2分鍾就可以寫出第一個HelloWorld。程序寫完了,但他幾乎沒有任何意義,因為他不能為我們解決問題。 

#!/usr/bin/env python3

print("Hello H和J的博客")

輸出
/usr/local/bin/python3.7 /Users/jijunjian/learn/mypython/src/HelloWorld.py Hello H和J的博客

 

 

     要了解一門語言,一些基礎內容還是要了解下,如果你有一門語言基礎的話,幾乎可以立馬上手,python是一門高級語言。建議了解下數據類型和變量,字符串和編碼,使用list和tuple ,使用dict和set。這些是python的基本數據類型,幾乎每個程序都會用到。其他就是條件判斷,循環,函數等...然而...

  

03

學以致用

 

       學了2周,新鮮感消失了,想放棄了,但是心中又無法面對花去的時間,直到學習結構化思維提到:知識往問題靠,問題往知識靠,不斷補充知識體系。有了這樣的意識問題就來了。

 

        問題:運營反饋某地投放了200個單車,但是監控地圖只能看到150輛,要找出缺少的50輛分析原因。

         背景:系統中以單車編號為key 存放在redis里,而運維提供的web工具一次只能查一個key。

          解決:一個個查,重復200次也能解決問題,但是太麻煩。做為程序員,我們首要做的就是:do not repeat yourself。既然問題要往知識靠,那我剛學的python是否可以快速搞定呢:運維提供的web工具其實就是發起一個http請求,解析返回的json,這些對於python來就就是幾行代碼的事兒,於是代碼就寫了好了。真的比重復200次又快,又准。這樣的經歷比單純的學習深刻許多。

  
#!/usr/bin/env python3

import requests
import json #單車列表 dataList = [ 'hget mapBike:單車編號1 city', 'hget mapBike:單車編號2 city' ] host = "運維工具地址" headers = \ { "method":"POST", "path":"/execute", "token":"我的token", "user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36" } index = 0; errorCount = 0; for i in dataList: index +=1 body = \ { "redisName": "redis-cluster", "command": i } r = requests.post(host,headers=headers,data=json.dumps(body)) data2 = json.loads(r.text) print("index=%s" % index) if data2["data"] != '城市編號': print("error:%s" % i) errorCount += 1; print("一共:%s" % index) print("error:%s" % errorCount)

 

      

        有了這次經歷,又燃起了學習熱情。map/reduce概念是一個有意思的東西,建議大家一定要學習。看大數據書籍里會多次提到。話分兩頭,又來了一個問題。

        問題:新版單車投放功能有一個缺陷,導致已經投放的數萬個單車某個屬性錯誤,要按單車編號修正數量。

         背景:投放時單車信息保存在了日志表的擴展信息中,dba只能導出格式如下,其他信息已經刪除。整個文件30M, 想使用多行編輯,刪除多余再使用excel公式生成sql, 想法很好,就是編輯時卡頓...誰用誰我知道

      
{"bikeNo":"abc123dba1"} 2020-03-07 20:43:31.64747
{"bikeNo":"abc123dba2"} 2020-03-07 20:43:31.64747 {"bikeNo":"abc123dba3"} 2020-03-07 20:43:31.64747 {"bikeNo":"abc123dba4"} 2020-03-07 20:43:31.64747 {"bikeNo":"abc123dba5"} 2020-03-07 20:43:31.64747

 


  解決:這次沒思考直接就想到Python了,想法很簡單:

         1,按行讀取,找到最后個“}”,拆分成兩個字符串。第二個為時間

         2,解析json得到單車編號,

         3,拼接bikeNo,與時間生成sql。輸出到文件。

         想到這里代碼也寫好了,就是這么快。關鍵還不會出錯。

#!/usr/bin/env python3

import json

#讀數據文件
with open('/Users/jijunjian/Downloads/daa.sql', 'r') as f1: list1 = f1.readlines() print(len(list1)) #最終輸出文件 with open('/Users/jijunjian/Downloads/test.txt', 'w') as f: for i in range(0, len(list1)): list1[i] = list1[i].strip('\n') index = list1[i].rindex('}'); ctime = list1[i][index+1:].strip() jsonString = list1[i][0:index+1] jsonx = json.loads(jsonString) # 可以拼接成 update 語句 f.write(jsonx["assertNo"]+";"+ctime+" "+"\n") print(i)

 

            

                                  

04

結語

        后來與湯哥聊到Python的話題,我們學習Python並不是想成為這個領域的專家,而是當來一個工具來使用。對我而言,這樣的程度就夠了,能快速解決問題,提供多一個思路。便不在糾結還要學多少了,以后有需求再補充知識體系就可以了。從美菜到哈啰的最近一年多看了10來本書,一直覺得沒啥收獲,就是沒想明白為什么要學。箭靶都沒有,只練習拉弓不會有多少提高。

        

        上面的這些問題不一定非要用python去解決,js,java都能實現,也許還更多快。既然學了Python,權當練手了。如何學以致用 -- 知識往問題靠,問題往知識靠

 

         I have a dream to be a good programmer。

         

    讓妞妞給我們的博客做了Logo

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM