1. 程式人生 > >python雜記二

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)