4 一個腳本講述 python 語言的基礎規範,適合初學者

最近學 python 的人比較多,今天講一下 python 的基礎:python 腳本的規範、縮進、編寫功能函數時注意事項等,這些都是自己編程過程中的心得體會。

一、python 腳本的規範:

每個腳本都有自己的規範,以下的規範不是強制的,但是規範一下,可以使你的腳本規範、易懂、方便使用。

    #!/usr/bin/env python    # -*- coding: utf-8 -*-  

這個寫在開頭,定義腳本編碼。現在多數都是 UTF8 格式,所以寫腳本盡量用這個編碼,遇到中文可以做編碼處理,字符串編碼處理主要就是 encode 和 decode

import os,urllib,MySQLdb,time,platform  

導入需要的模塊。

main:     pass  

定義函數

if __name__ == "__main__":   main  

這個就是說腳本從這裡往下執行,如果是其他的腳本調用這個腳本,這個腳本不至於執行其他的部分

提示:以上是整個腳本中的規範,大家在寫腳本的時候盡量這麼做。

二、python 的縮進

python 的對縮進要求很嚴格,縮進不對,就會報語法錯誤;python 中縮進就是一個 tab 鍵或是 4 個空格,4 個空格比較麻煩,直接一個 tab 鍵簡單,所以沒有特別的需求,縮進一般用 tab 鍵。縮進類似於分層,同一縮進就是相同的層次。見如下實例:

if a==0:   print aelse:   print b  

三、每一個功能對應一個函數

這一點我認為最重要,每一個功能就寫一個函數,這樣你的腳本清晰易懂,腳本其他復用這個功能也方便,腳本也不冗余。不建議不要一個函數里面有好多功能,使函數模塊化。

四、系統命令的引用

引用系統命令的時候,特別是 linux 命令,一定要寫命令的全路徑,比如:

os.popen("/sbin/ifconfig eth0").read  

這個你直接

os.popen("ifconfig eth0").read  

這樣也是沒有問題的,起碼是你手動執行腳本時,這個是會執行的,但是腳本做 cron 的時候,就不會執行了。所以這個要特別注意。

 五、異常處理

try:   passexcept Exception,e:  print e  

其中 e 就是錯誤錯誤信息。try 的異常處理這麼寫就足夠用了,還有其他的方法,不常用。

以下是一個獲取本地 ip 地址,從數據庫查詢 ip 的用途,去連接一個 URL,判斷這個 URL 是否可以用,並寫日誌。主要講了講 python 操作數據庫的常用用法。

 #!/usr/bin/env python # -*- coding: utf-8 -*-import os,urllib,MySQLdb,time,platformdef log_w(text):    logfile = "/tmp/websocket.log"    if os.path.isfile(logfile):if (os.path.getsize(logfile)/1024/1024) > 100:    os.remove(logfile)    now = time.strftime("%Y-%m-%d %H:%M:%S")    tt = str(now) + "t" + str(text) + "n"    f = open(logfile,\'a+\')    f.write(tt)    f.closedef get_idcname(ip):    try:conn = MySQLdb.connect(host = \'192.168.8.43\',port=3306,user = \'read_app\',passwd = \'123456\',charset=\'utf8\',connect_timeout=20)cursor = conn.cursor#查詢出的結果是元組形式,元組和列表基本一樣#cursor = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)#查詢結果是字典形式sql = "select host,user from mysql.user where host=\'%s\'" % ip#python中執行sql語句一次只能是一個sql語句,一次只執行一條,如果用分號分開寫多條的話是會報錯的,如果是多條sql語句可以多寫幾個sql和cursor.execute來分開執行cursor.execute(sql)#執行sql語句#cursor.executemany("""insert into dist_sniffer.sniffer_order_day values(%s,%s,%s,%s,%s,%s,%s,%s,%s) """,values)#執行組合插入數據庫的時候可以用這個,每個%s代表一個數據庫字段,values是一個元組或是一個列表alldata = cursor.fetchall#接收sql執行結果,如果是寫操作的,這個就不用了#conn.commit如果是寫操作,需要這個去提交cursor.closeconn.close#關閉數據庫回話return alldata[0][0].encode(\'UTF8\')#如果是寫操作的話就沒有返回值了。    except Exception,e:return 0def get_ip:    os = platform.system    if os == "Linux":ip = os.popen("/sbin/ifconfig eth0|grep \'inet addr\'").read.strip.split(":")[1].split[0]    elif os == "Windows":import wmic=wmi.WMInetwork = c.Win32_NetworkAdapterConfiguration (IPEnabled=1)for interface in network:    if interface.DefaultIPGateway:ip = interface.IPAddress[0]return ip#print interface.IPAddress[0],interface.MACAddress,interface.IPSubnet[0],interface.DefaultIPGateway[0],interface.DNSServerSearchOrder[0],interface.DNSServerSearchOrder[1]#獲取出網的ip地址、MAC地址、子網掩碼、默認網關、DNSdef web_status:    ip = get_ip    idc_name = get_idcname(ip)    url = "http://www.text.com/index.php?idc_ip=%s&idc_name=%s" % (ip,idc_name)    get = urllib.urlopen(url)    if get.getcode == 200:aa = int(get.read.strip)if aa == 1:    text = "Webservice return OK"else:    text =  "Webservice return Error"    else:text = "Conect webservice Error"    print text    log_w(text)if __name__ == "__main__":    web_status 

一開始就要養成一個好習慣,這樣對以後 python 編程是十分有益的。自己的深切體會。

《Python實戰-從菜鳥到大牛的進階之路》