學(xué)習(xí)python一年多,之前在cnblog上寫博客,偶然的機(jī)會(huì)看到一個(gè)簡書上的一篇文章篓叶,作者學(xué)習(xí)能力和筆記方面做的非常好,一來想學(xué)習(xí)學(xué)習(xí)羞秤,二來可以接觸下簡書的博客系統(tǒng)缸托,同時(shí)希望可以認(rèn)識更多更加優(yōu)秀有趣的朋友!
python編碼
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
print('python編碼')
Python 變量類型
Python有五個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)類型:Numbers(數(shù)字)String(字符串)List(列表)Tuple(元組)Dictionary(字典)
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
num = 10 #數(shù)值型
str = 'hello world' #字符串型
list = ['a','b','c',1,2,3] #列表 可以通過下表(偏移)指定輸出列表中的指定元素 從左到右0開始锥腻,從右左-1開始
tuple = ('a','b','c',1,2,3) #元組 可以通過下表指定輸出列表中的指定元素 從左到右0開始嗦董,從右左-1開始 元素不能唄二次賦值 相當(dāng)于是只讀列表
dict = {'name':'mike','age':18} #字典 為無序的對象集合 通過鍵去訪問對應(yīng)的元素
print(type(num))
print(type(str))
print(type(list))
print(type(tuple))
print(type(dict))
Python數(shù)據(jù)類型轉(zhuǎn)換
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
print(int(1.1)) # 轉(zhuǎn)換成整型 這里要注意的是轉(zhuǎn)型的字符串僅僅包含數(shù)字 要不會(huì)報(bào)錯(cuò)的
#c = long(b) # python3 之后沒有l(wèi)ong, 直接采用int轉(zhuǎn)換成整型
print(float(10)) # 轉(zhuǎn)換成浮點(diǎn)型
e = complex(1,2) # 創(chuàng)建一個(gè)復(fù)數(shù)
print(str(10)) # 轉(zhuǎn)換成字符串
print(repr(10)) # 轉(zhuǎn)換為表達(dá)式字符串
num1 = 10
num2 = 20
print(eval('num1 + num2'))# 將字符串str當(dāng)成有效的表達(dá)式來求值并返回計(jì)算結(jié)果
s = ['a','b','c',1,2,3]
print(tuple(s)) # 將序列 i 轉(zhuǎn)換為一個(gè)元組
s = ('a','b','c',1,2,3)
print(list(s)) # 將元組 s 轉(zhuǎn)換為一個(gè)序列
s = {11,22,33,44}
print(set(s)) # 轉(zhuǎn)換為可變集合
print(dict(one=1,two=2)) # 創(chuàng)建一個(gè)字典
print(frozenset(s)) # 轉(zhuǎn)換為不可變集合
print(chr(48)) # chr() 用一個(gè)范圍在 range(256)內(nèi)的(就是0~255)整數(shù)作參數(shù)母谎,返回一個(gè)對應(yīng)的字符
# print(unichr(48)) # python3 沒有用unichar函數(shù) 直接用chr替換
print(ord(u'\u2345')) # 將一個(gè)字符轉(zhuǎn)換為它的整數(shù)值
print(hex(10)) # 將一個(gè)整數(shù)轉(zhuǎn)換為一個(gè)十六進(jìn)制字符串
print(oct(10)) # 將一個(gè)整數(shù)轉(zhuǎn)換為一個(gè)八進(jìn)制字符串
Python 運(yùn)算符
Python算術(shù)運(yùn)算符
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
a = 2
b = 3
print(a + b) #加
print(a - b) #減
print(a * b) #乘
print(a / b) #除
print(a % b) #取模
print(a ** b) #冪 相當(dāng)于是 a的b次方
print(b // a) #取整除
Python 條件語句
if 判斷條件:
執(zhí)行語句……
else:
執(zhí)行語句……
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
salary = 20000
if(salary > 15000):
print('勉強(qiáng)可以養(yǎng)活自己!')
else:
print('兄弟,回家種田吧!')
python不支持switch瘦黑, 如果有多種情況的判斷的話,可以采用ifelseif實(shí)現(xiàn)
if 判斷條件:
執(zhí)行語句……
elif判斷條件:
執(zhí)行語句……
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
salary = 20000
if(salary > 50000):
print('土豪我們做朋友吧!')
elif(salary > 30000):
print('小資生活!')
elif(salary > 15000):
print('勉強(qiáng)可以養(yǎng)活自己!')
else:
print('兄弟,回家種田吧!')
Python 循環(huán)語句
Python for 循環(huán)語句
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#################對字符串的循環(huán)讀取 #####################
str = '廣州';
for i in str:
print(i)
#################對列表的循環(huán)讀取 #####################
list = [10,20,30,50]
new_list = []
for i in list:
if(i >= 19):
# print(i)
new_list.append(i) #追加到新的列表
# else:
# print(i)
# list.remove(i) #刪除列表中的元素 這里發(fā)現(xiàn)了個(gè)問題 如果刪除后 列表的偏移量(指針)應(yīng)該會(huì)重新排列,會(huì)導(dǎo)致 值為20的在循環(huán)中被忽略掉 最好用重新賦值到一個(gè)新的列表的形式
print(list)
print(new_list)
#################對元組的循環(huán)讀取 #####################
tuple = ('a','b','c',1,2,3)
new_tuple = ()
for i in tuple:
if(isinstance(i,int)):
print(i)
#################對字典的循環(huán)讀取 #####################
dict = {'name':'mike','age':18,'job':'engineer'}
for i in dict: #這里的i是字典的key 這里循環(huán)輸出的順序很有意思,好像按照key的第一個(gè)字母的正序輸出
# print(i)
print(dict[i])
for key,value in dict.items(): # 對鍵和值都進(jìn)行遍歷
print(key)
print(value)
Python While循環(huán)語句
a = 10
b = 20
while(a < b):
print(a)
a = a +1
Python 循環(huán)嵌套
#!/usr/bin/python
# -*- coding: UTF-8 -*-
i = 2
while(i < 100):
j = 2
while(j <= (i/j)):
if not(i%j): break
j = j + 1
if (j > i/j) :
print(i, " 是素?cái)?shù)")
i = i + 1
print("Good bye!")
break 和 continue的區(qū)別:break是直接終止整個(gè)循環(huán)幸斥,continue是終止當(dāng)前次的循環(huán)繼續(xù)下一次循環(huán)
#!/usr/bin/python
# -*- coding: UTF-8 -*-
list = ['a','b',1,2,10,30,'c']
for i in list:
if(isinstance(i,str)):
print(i)
else:
# continue
break
Python 日期和時(shí)間
Time模塊
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import time # 引入time模塊
print(time.time()) # 返回當(dāng)前時(shí)間的時(shí)間戳(1970紀(jì)元后經(jīng)過的浮點(diǎn)秒數(shù))
localtime = time.localtime(time.time())
print ("本地時(shí)間為 :", localtime) # 返回當(dāng)前的時(shí)間元組
localtime = time.asctime( time.localtime(time.time()) )
print("本地時(shí)間為 :", localtime) # 返回格式化的時(shí)間
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) # 返回自定義的格式日期
日歷(Calendar)模塊
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import calendar
cal = calendar.month(2016, 1)
print("以下輸出2016年1月份的日歷:")
print(cal)
Python 函數(shù)
函數(shù)相當(dāng)于是封裝好的一個(gè)代碼塊匹摇,可以提供應(yīng)用的模塊性和代碼的重用性,可以分為內(nèi)置函數(shù)和自定義函數(shù)
自定義函數(shù)的規(guī)則:
- 函數(shù)代碼塊以def關(guān)鍵詞開頭甲葬,后接函數(shù)標(biāo)識符名稱和圓括號()廊勃。
- 任何傳入?yún)?shù)和自變量必須放在圓括號中間。圓括號之間可以用于定義參數(shù)经窖。
- 函數(shù)的第一行語句可以選擇性地使用文檔字符串—用于存放函數(shù)說明坡垫。
- 函數(shù)內(nèi)容以冒號起始,并且縮進(jìn)画侣。
- Return[expression]結(jié)束函數(shù)冰悠,選擇性地返回一個(gè)值給調(diào)用方。不帶表達(dá)式的return相當(dāng)于返回 None配乱。
!/usr/bin/python
# -*- coding: UTF-8 -*-
import time
#函數(shù)的定義
def myfun():
print('當(dāng)前時(shí)間是:',time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
#函數(shù)的定義
def person(name,age): #name age為變量 可以對其進(jìn)行初始
print('名字:',name,'年齡',age)
#函數(shù)的調(diào)用
myfun()
#函數(shù)的調(diào)用
person('mike',18)
按值傳遞參數(shù)和按引用傳遞參數(shù):
所有參數(shù)(自變量)在Python里都是按引用傳遞溉卓。如果你在函數(shù)里修改了參數(shù),那么在調(diào)用這個(gè)函數(shù)的函數(shù)里搬泥,原始的參數(shù)也被改變
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def changeParameter(data):
data.append(123)
print('函數(shù)內(nèi)的參數(shù):',data) #函數(shù)內(nèi)的參數(shù)
data = [10,20]
changeParameter(data)
print('函數(shù)外的參數(shù):',data)
參數(shù)
以下是調(diào)用函數(shù)時(shí)可使用的正式參數(shù)類型:
- 必備參數(shù) 必備參數(shù)須以正確的順序傳入函數(shù)桑寨。調(diào)用時(shí)的數(shù)量必須和聲明時(shí)的一樣
- 命名參數(shù) 使用關(guān)鍵字參數(shù)允許函數(shù)調(diào)用時(shí)參數(shù)的順序與聲明時(shí)可以不一致,因?yàn)?Python 解釋器能夠用參數(shù)名匹配參數(shù)值
- 缺省參數(shù) 調(diào)用函數(shù)時(shí)忿檩,缺省參數(shù)的值如果沒有傳入尉尾,則被認(rèn)為是默認(rèn)值
- 不定長參數(shù) 如果調(diào)用的時(shí)候的參數(shù)比聲明的要多情況下,可采用不定長參數(shù) 加了星號(*)的變量名會(huì)存放所有未命名的變量參數(shù)
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def useParamer(name,age=18):
print('名字:',name,'年齡:',age)
useParamer(name='mike')
def useParamer(name,age):
print('名字:',name,'年齡:',age)
useParamer(age = '20',name='lina')
def printinfo(arg1, *vartuple):
"打印任何傳入的參數(shù)"
print("輸出: ")
print(arg1)
for var in vartuple:
print(var)
return
printinfo(10)
printinfo(70, 60, 50)
匿名函數(shù)
python 使用 lambda 來創(chuàng)建匿名函數(shù):
- lambda只是一個(gè)表達(dá)式燥透,函數(shù)體比def簡單很多
- lambda的主體是一個(gè)表達(dá)式代赁,而不是一個(gè)代碼塊。僅僅能在lambda表達(dá)式中封裝有限的邏輯進(jìn)去
- lambda函數(shù)擁有自己的命名空間兽掰,且不能訪問自有參數(shù)列表之外或全局命名空間里的參數(shù)
- 雖然lambda函數(shù)看起來只能寫一行芭碍,卻不等同于C或C++的內(nèi)聯(lián)函數(shù),后者的目的是調(diào)用小函數(shù)時(shí)不占用棧內(nèi)存從而增加運(yùn)行效率
lambda函數(shù)的語法只包含一個(gè)語句:lambda [arg1 [,arg2,.....argn]]:expression
# coding=utf-8
# !/usr/bin/python
# 定義匿名函數(shù)
sum = lambda arg1, arg2: arg1 * arg2;
# 調(diào)用sum函數(shù)
print("Value of total : ", sum(10, 20))
print("Value of total : ", sum(20, 20))
變量和局部變量:
- 定義在函數(shù)內(nèi)部的變量擁有一個(gè)局部作用域孽尽,定義在函數(shù)外的擁有全局作用域
- 局部變量只能在其被聲明的函數(shù)內(nèi)部訪問窖壕,而全局變量可以在整個(gè)程序范圍內(nèi)訪問。調(diào)用函數(shù)時(shí)杉女,所有在函數(shù)內(nèi)聲明的變量名稱都將被加入到作用域中
# coding=utf-8
# !/usr/bin/python
num = 2
def myfun():
global num # 函數(shù)內(nèi)部想訪問函數(shù)外的全局變量需要 加上global關(guān)鍵字
num = num +1
print(num)
myfun()
print(num)
Python 模塊
簡單的講模塊就是個(gè).py后綴的文件瞻讽,使用模塊可以是應(yīng)用的代碼更加的清晰,模塊中可以定義變量熏挎,函數(shù)和類速勇,同時(shí)也可以包含可執(zhí)行代碼
import 語句
如果想要在一個(gè)python文件中導(dǎo)入另外一個(gè)python文件,那么可以采用import語句坎拐,解析器搜索路徑下的模塊就會(huì)將其導(dǎo)入烦磁,然后就可以在當(dāng)前模塊下直接調(diào)用導(dǎo)入模塊的函數(shù)了
語法:
- import module1[, module2[,... moduleN] 導(dǎo)入模塊
- from modname import name1[, name2[, ... nameN]] 導(dǎo)入模塊中的指定部分
- from…import* 導(dǎo)入模塊中的全部內(nèi)容
# coding=utf-8
# !/usr/bin/python
import time #導(dǎo)入time模塊
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) # 調(diào)用time模塊中的函數(shù)解決時(shí)間業(yè)務(wù)需求
定位模塊
當(dāng)import導(dǎo)入一個(gè)模塊時(shí)养匈,底層Python解析器對模塊位置的搜索順序是:
- 當(dāng)前目錄
- 如果不在當(dāng)前目錄,Python則搜索在shell變量PYTHONPATH下的每個(gè)目錄
- 如果都找不到都伪,Python會(huì)察看默認(rèn)路徑呕乎。UNIX下,默認(rèn)路徑一般為/usr/local/lib/python/
模塊搜索路徑存儲(chǔ)在system模塊的sys.path變量中陨晶。變量里包含當(dāng)前目錄猬仁,PYTHONPATH和由安裝過程決定的默認(rèn)目錄
PYTHONPATH變量
作為環(huán)境變量,PYTHONPATH由裝在一個(gè)列表里的許多目錄組成先誉。PYTHONPATH的語法和shell變量PATH的一樣湿刽。
- 在Windows系統(tǒng),典型的PYTHONPATH:set PYTHONPATH=c:\python20\lib
- 在UNIX系統(tǒng)褐耳,典型的PYTHONPATH如下:set PYTHONPATH=/usr/local/lib/python
dir()函數(shù)
dir()函數(shù)一個(gè)排好序的字符串列表叭爱,內(nèi)容是一個(gè)模塊里定義過的名字
# coding=utf-8
# !/usr/bin/python
import time #導(dǎo)入time模塊
print(dir())
# OUTPUT : ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'time']
在這里,特殊字符串變量name指向模塊的名字漱病,file指向該模塊的導(dǎo)入文件名
globals()和locals()函數(shù)
- 根據(jù)調(diào)用地方的不同买雾,globals()和locals()函數(shù)可被用來返回全局和局部命名空間里的名字。
- 如果在函數(shù)內(nèi)部調(diào)用locals()杨帽,返回的是所有能在該函數(shù)里訪問的命名漓穿。
- 如果在函數(shù)內(nèi)部調(diào)用globals(),返回的是所有在該函數(shù)里能訪問的全局名字注盈。
- 兩個(gè)函數(shù)的返回類型都是字典晃危。所以名字們能用keys()函數(shù)摘取。
# coding=utf-8
# !/usr/bin/python
num1 = 10
def myfun():
num2 = 20
num3 = 30
sum = num2 + num3
print('函數(shù)里訪問的命名',locals())
print('函數(shù)里能訪問的全局名',globals())
myfun()
print('函數(shù)外調(diào)用locals',locals())
print('函數(shù)外調(diào)用globals',globals())
print(type(locals()))
#輸出的是字典類型數(shù)據(jù)
reload()函數(shù)
當(dāng)一個(gè)模塊被引入一個(gè)執(zhí)行腳本時(shí)老客,代碼只會(huì)從上至下執(zhí)行一次僚饭,如果想重新執(zhí)行模塊里頂層部分的代碼,可以用reload()函數(shù)胧砰。該函數(shù)會(huì)重新導(dǎo)入之前導(dǎo)入過的模塊
語法:reload(module_name)
Python中的包
包是一個(gè)分層次的文件目錄結(jié)構(gòu)鳍鸵,它定義了一個(gè)由模塊及子包,和子包下的子包等組成的Python的應(yīng)用環(huán)境
例子:
demo01.py 模塊
# coding=utf-8
# !/usr/bin/python
import pack
pack.ones() #調(diào)用pack包中one模塊的ones方法
pack.twos() #調(diào)用pack包中two模塊的twos方法
pack包下分別有:
one模塊( ones()函數(shù) )
two模塊( twos()函數(shù) )
# pack目錄下創(chuàng)建___init__.py文件模塊 使用顯式的導(dǎo)入語句
from .one import ones
from .two import twos
這里包的引入模塊原理應(yīng)該是impot引入一個(gè)包的時(shí)候,會(huì)先執(zhí)行init.py文件尉间,先加載init.py文件中的引入模塊偿乖,這樣在當(dāng)前的demo.py文件中只需引入pack包就可以直接調(diào)用包里面模塊的函數(shù)
Python 文件I/O
打開和關(guān)閉文件
open()函數(shù)
open()函數(shù)打開一個(gè)文件,創(chuàng)建一個(gè)文件哲嘲,然后就可以調(diào)用相關(guān)的輔助方法才可以調(diào)用它進(jìn)行讀寫
語法:file object = open(file_name [, access_mode][, buffering])
參數(shù):
- file_name:file_name變量是一個(gè)包含了你要訪問的文件名稱的字符串值
- access_mode:access_mode決定了打開文件的模式:只讀贪薪,寫入,追加等眠副。所有可取值見如下的完全列表画切。這個(gè)參數(shù)是非強(qiáng)制的,默認(rèn)文件訪問模式為只讀(r)
- buffering:如果buffering的值被設(shè)為0囱怕,就不會(huì)有寄存霍弹。如果buffering的值取1毫别,訪問文件時(shí)會(huì)寄存行。如果將buffering的值設(shè)為大于1的整數(shù)庞萍,表明了這就是的寄存區(qū)的緩沖大小拧烦。如果取負(fù)值忘闻,寄存區(qū)的緩沖大小則為系統(tǒng)默認(rèn)
模式 | 價(jià)格 |
---|---|
r | 以只讀方式打開文件钝计。文件的指針將會(huì)放在文件的開頭。這是默認(rèn)模式齐佳。 |
rb | 以二進(jìn)制格式打開一個(gè)文件用于只讀私恬。文件指針將會(huì)放在文件的開頭。這是默認(rèn)模式炼吴。 |
r+ | 打開一個(gè)文件用于讀寫本鸣。文件指針將會(huì)放在文件的開頭。 |
rb+ | 以二進(jìn)制格式打開一個(gè)文件用于讀寫硅蹦。文件指針將會(huì)放在文件的開頭荣德。 |
w | 打開一個(gè)文件只用于寫入。如果該文件已存在則將其覆蓋童芹。如果該文件不存在涮瞻,創(chuàng)建新文件。 |
wb | 以二進(jìn)制格式打開一個(gè)文件只用于寫入假褪。如果該文件已存在則將其覆蓋署咽。如果該文件不存在,創(chuàng)建新文件生音。 |
w+ | 打開一個(gè)文件用于讀寫宁否。如果該文件已存在則將其覆蓋。如果該文件不存在缀遍,創(chuàng)建新文件惰聂。 |
wb+ | 以二進(jìn)制格式打開一個(gè)文件用于讀寫。如果該文件已存在則將其覆蓋薪伏。如果該文件不存在痕檬,創(chuàng)建新文件。 |
a | 打開一個(gè)文件用于追加歹苦。如果該文件已存在青伤,文件指針將會(huì)放在文件的結(jié)尾。也就是說殴瘦,新的內(nèi)容將會(huì)被寫入到已有內(nèi)容之后狠角。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫入蚪腋。 |
ab | 以二進(jìn)制格式打開一個(gè)文件用于追加丰歌。如果該文件已存在姨蟋,文件指針將會(huì)放在文件的結(jié)尾。也就是說立帖,新的內(nèi)容將會(huì)被寫入到已有內(nèi)容之后眼溶。如果該文件不存在,創(chuàng)建新文件進(jìn)行寫入晓勇。 |
a+ | 打開一個(gè)文件用于讀寫堂飞。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾绑咱。文件打開時(shí)會(huì)是追加模式绰筛。如果該文件不存在,創(chuàng)建新文件用于讀寫描融。 |
ab+ | 以二進(jìn)制格式打開一個(gè)文件用于追加铝噩。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾窿克。如果該文件不存在骏庸,創(chuàng)建新文件用于讀寫。 |
file對象的屬性
屬性 | 描述 |
---|---|
file.closed | 返回true如果文件已被關(guān)閉年叮,否則返回false具被。 |
file.mode | 返回被打開文件的訪問模式。 |
file.name | 返回文件的名稱谋右。 |
file.softspace | 如果用print輸出后硬猫,必須跟一個(gè)空格符,則返回false改执。否則返回true啸蜜。 |
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#打開文件
fo = open('test.txt')
print(fo.closed) # 檢測文件是否已打開
print(fo.mode) # 返回文件的模式
print(fo.name) # 返回文件名
# print(fo.softspace) python3 沒有該屬性
file對象的方法
read()方法
- read()方法從一個(gè)打開的文件中讀取一個(gè)字符串。需要重點(diǎn)注意的是辈挂,Python字符串可以是二進(jìn)制數(shù)據(jù)衬横,而不是僅僅是文字
- 語法:fileObject.read([count]);
- 參數(shù):被傳遞的參數(shù)是要從已打開文件中讀取的字節(jié)計(jì)數(shù)。該方法從文件的開頭開始讀入终蒂,如果沒有傳入count蜂林,它會(huì)嘗試盡可能多地讀取更多的內(nèi)容,很可能是直到文件的末尾
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#打開文件
fo = open('test.txt','r+')
print(fo.read(12)) # 讀取文件
fo.close() # 關(guān)閉文件
Write()方法
- Write()方法可將任何字符串寫入一個(gè)打開的文件拇泣。需要重點(diǎn)注意的是噪叙,Python字符串可以是二進(jìn)制數(shù)據(jù),而不是僅僅是文字霉翔。
- Write()方法不在字符串的結(jié)尾不添加換行符('\n')
- 語法 fileObject.write(string)
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#打開文件
fo = open('test.txt','a+')
fo.write('騷年加油哦U隼佟!!\n')
fo.close() # 關(guān)閉文件
Close()方法
- File對象的close()方法刷新緩沖區(qū)里任何還沒寫入的信息子眶,并關(guān)閉該文件瀑凝,這之后便不能再進(jìn)行寫入。
當(dāng)一個(gè)文件對象的引用被重新指定給另一個(gè)文件時(shí)臭杰,Python會(huì)關(guān)閉之前的文件粤咪。用close()方法關(guān)閉文件是一個(gè)很好的習(xí)慣 - 語法:fileObject.close();
remove()方法
- 可以用remove()方法刪除文件,需要提供要?jiǎng)h除的文件名作為參數(shù)
- 語法:os.remove(file_name)
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
os.remove("test.txt") # 刪除文件
Python的目錄操作
所有文件都包含在各個(gè)不同的目錄下渴杆,不過Python也能輕松處理寥枝。os模塊有許多方法能幫你創(chuàng)建,刪除和更改目錄
mkdir()方法
- 可以使用os模塊的mkdir()方法在當(dāng)前目錄下創(chuàng)建新的目錄們将塑。你需要提供一個(gè)包含了要?jiǎng)?chuàng)建的目錄名稱的參數(shù)
- 語法:os.mkdir("newdir")
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
os.mkdir('test.txt') # 創(chuàng)建一個(gè)目錄
chdir()方法
- 可以用chdir()方法來改變當(dāng)前的目錄脉顿。chdir()方法需要的一個(gè)參數(shù)是你想設(shè)成當(dāng)前目錄的目錄名稱蝌麸。
- 語法:os.chdir("newdir")
rmdir()方法
- rmdir()方法刪除目錄点寥,目錄名稱以參數(shù)傳遞。
- 在刪除這個(gè)目錄之前来吩,它的所有內(nèi)容應(yīng)該先被清除敢辩。
- 語法:os.rmdir('dirname')
Python 異常處理
什么是異常:
- 異常即是一個(gè)事件,該事件會(huì)在程序執(zhí)行過程中發(fā)生弟疆,影響了程序的正常執(zhí)行
- 一般情況下戚长,在Python無法正常處理程序時(shí)就會(huì)發(fā)生一個(gè)異常
- 異常是Python對象,表示一個(gè)錯(cuò)誤
- 當(dāng)Python腳本發(fā)生異常時(shí)我們需要捕獲處理它怠苔,否則程序會(huì)終止執(zhí)行
異常處理:
- 捕捉異惩可以使用try/except語句
- try/except語句用來檢測try語句塊中的錯(cuò)誤,從而讓except語句捕獲異常信息并處理
- 如果你不想在異常發(fā)生時(shí)結(jié)束你的程序柑司,只需在try里捕獲它
try的工作原理:
當(dāng)開始一個(gè)try語句后迫肖,python就在當(dāng)前程序的上下文中作標(biāo)記,這樣當(dāng)異常出現(xiàn)時(shí)就可以回到這里攒驰,try子句先執(zhí)行蟆湖,接下來會(huì)發(fā)生什么依賴于執(zhí)行時(shí)是否出現(xiàn)異常。
- 如果當(dāng)try后的語句執(zhí)行時(shí)發(fā)生異常玻粪,python就跳回到try并執(zhí)行第一個(gè)匹配該異常的except子句隅津,異常處理完畢,控制流就通過整個(gè)try語句(除非在處理異常時(shí)又引發(fā)新的異常)劲室。
- 如果在try后的語句里發(fā)生了異常伦仍,卻沒有匹配的except子句,異常將被遞交到上層的try很洋,或者到程序的最上層(這樣將結(jié)束程序充蓝,并打印缺省的出錯(cuò)信息)。
- 如果在try子句執(zhí)行時(shí)沒有發(fā)生異常蹲缠,python將執(zhí)行else語句后的語句(如果有else的話)棺克,然后控制流通過整個(gè)try語句悠垛。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
try:
int('a')
except:
print('int()方法,參數(shù)需要為數(shù)字 要不會(huì)報(bào)錯(cuò)')
else:
print('OK')
try-finally 語句
try-finally 語句無論是否發(fā)生異常都將執(zhí)行最后的代碼
python與Java的異常處理模式相似,異常處理語句也可以嵌套
如果外層try子句中的代碼引發(fā)異常娜谊,程序?qū)⒅苯犹D(zhuǎn)到外層try對應(yīng)的except子句确买,而內(nèi)部的try子句將不會(huì)被執(zhí)行
#!/usr/bin/python
# -*- coding: UTF-8 -*-
try:
s = "hello"
try:
print(s[0] + s[1])
print(s[0] - s[1])
except TypeError:
print("字符串不支持減法運(yùn)算")
except:
print("異常")
raise拋出異常 捕捉異常
#!/usr/bin/python
# -*- coding: UTF-8 -*-
num = 2
try:
if(num > 1):
raise Exception(num,'大于1')
elif(num < 1):
raise Exception(num,'小于1')
else:
raise Exception(num,'等于1')
except Exception as e:
print(e)
Exception 源碼
class Exception(BaseException):
""" Common base class for all non-exit exceptions. """
def __init__(self, *args, **kwargs): # real signature unknown
pass
@staticmethod # known case of __new__
def __new__(*args, **kwargs): # real signature unknown
""" Create and return a new object. See help(type) for accurate signature. """
pass