python雜記二
1. 寫檔案可以直接使用print函式
file_name = open("file_name.txt","w") print("file contain.",file = file_name) file_name.close()
2. 判斷一個檔案有沒有開啟
可以判斷檔案變數有沒有被定義,即有沒有在locals()返回的集合中
try: file_name = open("file_name","r") except IOError: print("File eror") finally: if 'file_name' in locals(): file_name.close()
3. 使用with語句就不再需要包含一個finally組來處理檔案的關閉,python直譯器會自動考慮這一點
開啟多個檔案時,中間用逗號分隔
try: with open("file_name1","w") as file_name1, open("file_name2","w") as file_name2: print("file1 contain.",file = file_name1) print("file2 contain.", file = file_name2) except IOError: print("File eror")
4. print預設輸出的位置是sys.stdout,即螢幕,其在sys模組中定義。file引數可以改變輸出位置,比如輸出到檔案。
print函式的預設簽名為 print(value, sep=' ', end='\n', file=sys.stdout)
5. python提供了一個標準庫,名為pickle,可以儲存和載入幾乎任何python資料物件
需要匯入所需要的模組,然後使用dump()儲存資料,以後某個時間使用load()恢復資料。惟一的要求就是必須以二進位制訪問模式開啟這些檔案,如果出了問題,pickle模組會產生一個PickleError。
import pickle try: with open("file_name","wb") as file_name: pickle.dump([1,2,3], file_name) with open("file_name2", "rb") as file_name2: temp_list = pickle.load(file_name2) except IOError as err: print("File eror: " + str(err)) except pickle.PickleError as perr: print("Pickling error: " + str(perr))
6. 對於列表,sort()方法提供原地排序,sorted()方法提供複製排序,使用方法略有不同,如下
data.sort() sorted(data)
兩個方法預設升序,降序的話,要傳入引數reverse=True
7. glob模組可以向作業系統查詢一個檔名列表
import glob data_files = glob.glob("data/*.txt")
8. python提供了自己的web伺服器,這個web伺服器包含在http.server庫模組中。
構建一個web伺服器要有這5行程式碼
# 匯入HTTP伺服器和CGI模組 from http.server import HTTPServer, CGIHTTPRequestHandler # 指定一個介面 port = 8080 # 建立一個HTTP伺服器 httpd = HTTPServer(('',port),CGIHTTPRequestHandler) print("Starting simple_httpd on port: " + str(httpd.server_port)) httpd.serve_forever()
9. python的CGI模組可以用來訪問表單資料
import cgi # 獲取所有表單資料並放在一個字典中 form_data = cgi.FieldStorage()
10. python的標準庫提供了一個CGI跟蹤模組:cgitb,啟用這個模組時,會在web瀏覽器上顯示詳細的錯誤訊息。這些訊息可以幫助你找出CGI中哪裡出了問題,改正錯誤而且CGI正常工作後中,再關掉CGI跟蹤
import cgitb cgitb.enable()
11. python3 預裝了SQLite3,要使用SQLite,只需要匯入sqlite3庫,燕使用Python的標準化資料庫API來程式設計
# 匯入sqlite3庫 import sqlite3 # 建立與資料庫的連線 connection = sqlite3.connect('test.sqlite') # 建立遊標 cursor = connection.cursor() # 建表 cursor.execute("""CREATE TABLE students( id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL, name TEXT NOT NULL, dob DATE NOT NULL)""") cursor.execute("""CREATE TABLE score( student_id INTEGER NOT NULL, value TEXT NOT NULL, FOREIGN KEY (student_id) REFERENCES students)""") connection.commit() cursor.execute("INSERT INTO students (name,dob) VALUES (?,?)",(name,dob)) connection.commit() cursor.execute("SELECT id from students WHERE name=? AND dob=?",(name,dob)) cursor.execute("SELECT value FROM score WHERE student_id=?",(student_id,)) # 遊標方法返回的都是資料行列表 # 返回下一個資料行 cursor.fetchone() # 返回多個數據行 cursor.fetchmany() # 返回所有資料 cursor.fetchall() connection.close()
12. os庫可以查詢系統環境變數
import os os.environ['path']
13. python在函式中對直接使用全域性變數時,會查詢同名的區域性變數,找不到就會報UnboundLocalError異常。要在函式裡修改一個全域性變數時,要在函式裡global + 變數名進行宣告。
sayhi = 'hello' def what_to_say(): global sayhi print(sayhi) sayhi = 'bey-bey' print(sayhi)