1. 程式人生 > 實用技巧 >三、Python基礎(5)

三、Python基礎(5)

(一)SYS模組

1、sys模組

import sys

# 獲取Python直譯器的版本資訊
sys.version   

# 返回作業系統平臺名稱
sys.platform  

# 返回模組的搜尋路徑,初始化時使用PYTHONPATH環境變數的值
sys.path

# 獲取系統當前編碼,預設為:uft-8      
sys.getdefaultencoding()

# 設定系統的預設編碼 
sys.setdefaultencoding() 

# 獲取檔案系統使用編碼方式,預設是utf-8
sys.getfilesystemencoding() 

# 用來獲取執行Python檔案的時候,傳過來的引數
sys.argv

2、獲取執行Python檔案時的時候,傳過來的引數

sys.argv:是一個指令碼執行引數列表,列表的第一個元素是指令碼名稱,第二元素開始是引數:

(二)異常處理

1、下標越界:IndexError: list index out of range

2、找不到檔案或資料夾:FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'

3、無法將字串轉換為浮點:ValueError: could not convert string to float: 's.3'

4、程式中一旦遇到異常,程式就會停止丟擲異常:捕獲異常,處理異常

(1)一般捕捉異常用:try

(2)多方面考慮異常,捕獲異常,打印出來:

try:
    '1' + 2
    2 / 0
except TypeError as e:
    print(e)
    print('出錯了')

except ZeroDivisionError as e :
    print('除數不能為0')
    
except IndexError:
    print('下標錯誤')
    
except KeyError:
    print('找不到字典的Key')
except FileNotFoundError: print('檔案打不開
')
else: print('沒有異常')

(3)捕捉到所有的異常:Exception

try:
    '1' + '2'
    2 / 0

# Exception都可以捕捉到所有的異常,但判斷不了清晰的異常資訊
except Exception as e:
    print('出異常了',e)

else:
    print('沒有異常')

(4)不管有沒有異常,最後必走的:finally

try:
    '1' + '2'
    2 / 0

except Exception as e:
    print('出異常了',e)
else:
    print('沒有異常')

finally:
    print('abc')

(5)例項定義異常函式:

def is_float(s):
    try:
        f = float(s)
    except:
        return False
    else:
        if f > 0:
            return True

(6)處理異常,呼叫堆疊資訊,列印異常報錯

import traceback
def is_price(s):
    try:
        f = float(s)
    except Exception as e:
        traceback.print_exc()
        print('列印錯誤資訊:',traceback.format_exc())
        return False
    else:
        if f > 0:
            return True

# 呼叫堆疊資訊
is_price('abmdkkkde')  

(三)傳送郵件

1、首先需要安裝yamail模組:pip install yamail

2、傳送郵件,用什麼郵箱都可以:例如QQ郵箱,需要進入設定-賬戶-開啟授權碼:

3、傳送郵件程式:

import yamail   

# import yagmail  發附件的附件如果是中文名,是亂碼(與yamail用法是一樣的)

# 改成自己郵箱的郵箱的伺服器即可
smtp = yamail.SMTP(host='smtp.126.com',    
                   user='[email protected]',
                   password='TXGDEDVEBEFZXSAZ')
# 如果是163、qq等免費郵箱的話需要授權碼
# 自己公司的郵箱,一般使用密碼

# 傳送給誰
smtp.send(to=['[email protected]'],
# 郵件主題       
          subject='good afternoon,請查收附件',
# 抄送給誰,如果是多個人寫list   
          cc=['[email protected]','[email protected]'],
# 郵件正文              
          contents='郵件正文', 
# 附件,如果是多個附件,寫list                  
          attachments=['day06.txt','day07.txt']             
          )
smtp.close()

(四)關於Excel操作:Python中分別按照這三個模組

# 安裝讀取Excel
pip install xlrd 

# 安裝寫入Excel
pip install xlwt

# 安裝修改Excel
pip install xlutils

1、寫Excel

(1)例項一:

import xlwt

book = xlwt.Workbook()
sheet = book.add_sheet('students')

sheet.write(0,0,'id')
sheet.write(0,1,'name')
sheet.write(0,2,'age')

sheet.write(1,0,'1')
sheet.write(1,1,'Bob')
sheet.write(1,2,'18')

# 如果字尾寫成xlsx,使用微軟office開啟
book.save('students.xls')  

(2)例項二:

#編號 姓名 地址 年齡

stus = [
    [1,'Ann','bejing',51],
    [2,'Mike','shanghai',28],
    [3,'Helen','shanghai',16],
    [4,'Bob','shanghai',21],
    [5,'Nancy','shanghai',35],
    [6,'John','beijing',16],
]

stus.insert(0,['編號','姓名', '地址','年齡'])
book = xlwt.Workbook()
sheet = book.add_sheet('sheet1')

# row = 0
# for stu in stus:       # 控制行
#     col = 0
#     for s in stu:      # 控制列
#         sheet.write(row,col,s)
#         col +=1
#     row +=1

for row,stu in enumerate(stus):
    for col,s in enumerate(stu):
        sheet.write(row,col,s)

ages = [s[-1] for s in stus if type(s[-1])!=str]
avg_age = round(sum(ages) / len(ages),2)
content = '平均年齡:%s'%avg_age
sheet.write(row+1,0,content)
book.save('students.xls')

2、讀取Excel

(1)需要匯入:import xlrd

(2)例項如下:

import xlrd

# 開啟檔案
book = xlrd.open_workbook('students.xls')

# 根據sheet頁獲取資料
sheet = book.sheet_by_index(0)  
sheet = book.sheet_by_name('sheet1')

# 獲取所有的sheet頁,返回的是一個list,list裡面就是每個sheet物件
print(book.sheets())   

for s in book.sheets():
    print(s.row_values(2))

# 獲取具體的單元格資料
print(sheet.cell(0,0).value) 
  
# 獲取某一整行的資料
print(sheet.row_values(0))     
print(sheet.row_values(1))

# 獲取某一整列資料
print(sheet.col_values(0))     
print(sheet.col_values(1))

# 獲取多少行資料
print(sheet.nrows)  

# 獲取多少列資料
print(sheet.ncols)  

3、修改Excel

(1)需要匯入:

from xlutils import copy

import xlrd

(2)修改Excel,例項如下:

from xlutils import copy
import xlrd

# 開啟檔案
book = xlrd.open_workbook('students.xls')
sheet = book.sheet_by_index(0)

# 拷貝一個新的模組進行修改
new_book = copy.copy(book)
copy_sheet = new_book.get_sheet(0)

for row in range(1,sheet.nrows-1):  # 1 2 3 4 5 6 7
    addr = sheet.cell(row,2).value
    addr = addr.replace('beijing','北京').replace('shanghai','上海')
    copy_sheet.write(row,2,addr)

new_book.save('students.xls')

(七)MySQL操作

1、前提需要安裝:pip install pymysql

2、需要匯入:import pymysql

# 定義IP地址
host = '118.24.3.40'
# 定義使用者名稱
user = 'jxz'
# 定義密碼,只能是字串
password = '123456'
# 資料庫名稱DB
db = 'jxz'
# 定義埠號:int型別
port = 3306 
# 連線資料庫
connect = pymysql.connect(host = host, user = user,
                password = password ,
                port = port ,db = db,
                autocommit = True  # 自動提交
)
cur =connect.cursor()  # 建立遊標,倉庫管理員

# 插入資料
cur.execute('insert into students values (2,"Amy","女","18","天馬座","天津");')

cur.execute('insert into students(name,class) values ("Ann","女","天馬座");')

# 刪除資料
cur.execute('delete from students where id =123241;')

cur.execute('update students set name = "Amy" where id = 2;')

# connect.rollback() # 回滾

# insert語句、delete語句、update語句需要執行commit,才能執行生效,可以設定自動提交
connect.commit() 

# 查詢表資料
cur.execute('select * from students limit 5;')
# 表的描述
print(cur.description)

result = cur.fetchall() #拿到所有的結果,是一個二維陣列
print(cur.fetchone())
print(cur.fetchmany(2))
print(result)
cur.close()
connect.close()