2022-02-17

文件的作用

使用文件的目的:保存數據存放在磁盤

把一些存儲存放起來嗽测,可以讓程序下一次執(zhí)行的時候直接使用,而不必重新制作一份,省時省力

二唠粥、文件的打開與關閉

思考:如果想用word編寫一份簡歷疏魏,應該有哪些流程呢?

步驟:新建--寫入數據--關閉

打開word軟件晤愧,新建一個word文件寫入個人簡歷信息保存文件關閉word軟件

同樣大莫,在操作文件的整體過程與使用word編寫一份簡歷的過程是很相似的

結論

打開文件,或者新建立一個文件讀/寫數據關閉文件

2.1 打開文件

在python官份,使用open函數只厘,可以打開一個已經存在的文件,或者創(chuàng)建一個新文件open(文件名舅巷,訪問模式)

格式

f=open(‘文件’,'w')或者f=open('文件','r')

如下圖所示:不同的打開文件的方式

image-20210117131807308.png

常見的文件操作有:寫羔味,讀,追加

2.1.1 寫數據(write)

格式

對象=open("文件",w)對象.write("寫入數據")對象.close

案例:以寫的方式打開文件悄谐,寫入數據

f=open('test.txt','w')f.write('hello world, i am here!')f.close()

繼續(xù)寫入數據

f=open('test.txt','w')f.write('I love you')f.close()

總結:

如果文件不存在那么創(chuàng)建介评,如果存在那么就先清空,然后寫入數據

2.1.2 讀數據(read)

案例:以讀的方式打開文件爬舰,讀取數據

格式

對象 = open("文件",r)變量 = 對象.read()print(變量)

案例:讀取文件(test.txt)

f=open('test.txt','r')content=f.read()print(content)

總結:

如果用open打開文件時们陆,如果使用的"r",那么可以省略情屹,即只寫open('test.txt')如果沒有文件坪仇,打開報錯,存在該文件才能操作如果文件中存在中文顯示垃你,會出現亂碼需要添加encoding='utf-8'open(‘test.txt’,”r”,encoding='utf-8')

思考:如果只想讀取幾個字怎么操作?

案例:讀取指定長度的數據(單位是字節(jié))

f = open('test.txt', 'r')content = f.read(5)? # 最多讀取5個數據print(content)

注意:

使用read(num)可以從文件中讀取數據椅文,num表示要從文件中讀取的數據的長度(單位是字節(jié)),如果沒有傳入num惜颇,那么就表示讀取文件中所有的數據

2.1.3 讀數據(readlines)

就像read沒有參數時一樣皆刺,readlines可以按照行的方式把整個文件中的內容進行一次性讀取,并且返回的是一個列表凌摄,其中每一行的數據為一個元素

格式

對象=open("文件",r)變量=對象.readlines()print(變量)

案例:讀取文件(test.txt)

f = open('test.txt', 'r')content = f.readlines()print(content)print(type(content))

2.1.4 讀數據(readline)

readline可以按照行的方式把整個文件中的內容進行一行一行的讀取

格式

對象=open("文件",r)變量=對象.readline()print(變量)

案例羡蛾,一行一行讀取

f=open('a.txt','r',encoding='utf-8')whileTrue:content=f.readline()ifcontent:print(content)else:break

2.1.5 可寫(a)

格式

對象=open("",a)對象.write("寫入數據")對象.close

案例,在文件中寫入數據

f=open("test.txt",a)f.write("新的數據")對象.close

總結:

(可寫)形式打開文件锨亏,如果文件不存在則創(chuàng)建并從頭添加寫入的內容痴怨,存在則原有數據后追加數據

2.1.6 讀數據(rb)

格式1

對象 = open("二進制文件",rb)變量= 對象.read()print(變量)

格式2

withopen("二進制文件","rb")as對象:變量=對象.read()print(變量)

案例:使用盡可能多的方式實現讀取圖片

f = open('33.jpg', 'rb')content = f.read()print(content)

withopen("33.jpg","rb")asrf:res=rf.read()print(res)

使用習慣:格式2中不需要手動關閉文件,所以經常被使用

總結

如果沒有文件器予,打開報錯浪藻,存在該文件才能操作

2.1.7 寫數據(wb)

格式

withopen("二進制文件","wb")as對象:變量=對象.write()print(變量)

案例:備份圖片

withopen("1.jpg","rb")asrf:res=rf.read()withopen("textjpg.jpg","wb")aswf:res=wf.write(res)print(res)

2.2 關閉文件

格式

close()

2.3 思考題

如果一個文件很大,比如5G乾翔,試想應該怎樣把文件的數據讀取到內存然后進行處理呢爱葵?

調用read()會一次性讀取文件的全部內容,如果文件有10G,內存就爆了钧惧,所以暇韧,要保險起見,可以反復調用read(size)方法?每次最多讀取size個字節(jié)的內容浓瞪。另外,調用readline()可以每次讀取一行內容巧婶,調用readlines()一次讀取所有內容并按行返回list?因此乾颁,要根據需要決定怎么調用。如果文件很小艺栈,read()一次性讀取最方便英岭;如果不能確定文件大小,反復調用read(size)比較保險湿右;如果是配置文件诅妹,調用readlines()最方便

三、文件和文件夾的操作

文件的相關操作

有些時候毅人,需要對文件進行重命名吭狡、刪除等一些操作,python的os模塊中都有這么功能

3.1 文件重命名

os模塊中的rename()可以完成對文件的重命名操作

格式

importosos.rename("需要修改的文件名","新文件名")

案例:

importosos.rename("test.txt","new.txt")

3.2 刪除文件

os模塊中的remove()可以完成對文件的重命名操作

格式

importosos.remove("文件名")

案例:

importosos.rename("new.txt")

文件夾的相關操作

2.1 創(chuàng)建文件夾

os模塊中的mkdir()可以完成對文件的重命名操作

2.2 獲取當前目錄

os模塊中的getcwd()可以獲取當前目錄

四丈莺、異常

1:什么是異常划煮?

異常即是一個事件,該事件會在程序執(zhí)行過程中發(fā)生缔俄,影響了程序的正常執(zhí)行弛秋。

一般情況下,在Python無法正常處理程序時就會發(fā)生一個異常俐载。

異常是Python對象蟹略,表示一個錯誤。

當Python腳本發(fā)生異常時我們需要捕獲處理它遏佣,否則程序會終止執(zhí)行挖炬。

演示異常

f=open("123.txt","r")#FileNotFoundError: [Errno 2] No such file or directory: '123.txt'list=[1,2,3]print(list[4])#IndexError: list index out of rangestr="jack"str.index("v")ValueError:substringnotfoundc=5/0print(c)#ZeroDivisionError: division by zero

2 異常處理

2.1 作用

捕捉異常可以使用try/except語句贼急。try/except語句用來檢測try語句塊中的錯誤茅茂,從而讓except語句捕獲異常信息并處理。如果你不想在異常發(fā)生時結束你的程序太抓,只需在try里捕獲它空闲。

2.2 語法

以下為簡單的try....except...else的語法

try:<語句>#運行別的代碼except<名字>:<語句>#如果在try部份引發(fā)了'name'異常else:<語句>#如果沒有異常發(fā)生

代碼

try:open("qwe.txt","r")print("123")exceptFileNotFoundError:print("異常處理")else:print("沒有異常")

try:open("qwe.txt","r")print("123")exceptFileNotFoundErrorasresult:print("異常處理",result)else:print("沒有異常")

2.3:使用except而不帶任何異常類型

你可以不帶任何異常類型使用except,如下實例

語法

try:正常的操作except:發(fā)生異常走敌,執(zhí)行這塊代碼else:如果沒有異常執(zhí)行這塊代碼

代碼

try:open("qwe.txt","r")print("123")except:print("異常處理")else:print("沒有異常")

注意:以上方式try-except語句捕獲所有發(fā)生的異常碴倾。但這不是一個很好的方式,我們不能通過該程序識別出具體的異常信息。因為它捕獲所有的異常跌榔。

2.4:使用except而帶多種異常類型

語法

try:異常的操作except(Exception1[,Exception2[,...ExceptionN]]]):發(fā)生以上多個異常中的一個异雁,執(zhí)行這塊代碼......................else:如果沒有異常執(zhí)行這塊代碼

代碼

list=[1,2,3,4]try:open("qwe.txt","r")list[7]except(NameError,FileNotFoundError)asrese:print("出現異常")else:print("沒有異常")

2.5:try-finally 語句

try-finally語句無論是否發(fā)生異常都將執(zhí)行最后的代碼

語法

try:<語句>finally:<語句>#退出try時總會執(zhí)行

案例

try:fh=open("test.txt","r")fh.readlines()fh.close()finally:print("Error: 沒有找到文件或讀取文件失敗")

注意:當在try塊中拋出一個異常,立即執(zhí)行finally塊代碼僧须。

finally塊中的所有語句執(zhí)行后纲刀,異常被再次觸發(fā),并執(zhí)行except塊代碼担平。

參數的內容不同于異常

2.6 異常的傳遞

代碼

deffunc1():print("---func1--1---")print(num)print("---func1--2---")# def func2():#? ? print("--func2--1---")#? ? func1()#? ? print("--func2--2---")deffunc3():try:print("---func3--1---")func1()print("--func3--2----")exceptExceptionasresult:print(result)print("--func3---3---")func3()#func2()

2.7:觸發(fā)異常

可以使用raise語句自己觸發(fā)異常

案例:輸入考生的成績(0~100)

deffunctionName(score):ifscore<0orscore>100:raiseException("Invalid score!",score)# 觸發(fā)異常后示绊,后面的代碼就不會再執(zhí)行functionName(200)

2.8:用戶自定義異常

定義

通過創(chuàng)建一個新的異常類,程序可以命名它們自己的異常暂论。異常應該是典型的繼承自Exception類面褐,通過直接或間接的方式

代碼:長度不低于3為

classShortInputException(Exception):def__init__(self,length,atleast):self.length=length? ? ? ? self.atleast=atleastdefmain():try:s=input('請輸入 --> ')iflen(s)<3:# raise引發(fā)一個你定義的異常raiseShortInputException(len(s),3)exceptShortInputExceptionasresult:#x這個變量被綁定到了錯誤的實例print('ShortInputException: 輸入的長度是 %d,長度至少應是 %d'%(result.length,result.atleast))else:print('沒有異常發(fā)生')main()

五、模塊

Python 模塊(Module)取胎,是一個Python文件展哭,以.py 結尾,包含了Python 對象定義和Python語句

下例是個簡單的模塊 aa.py:

deftest1():print("我是模塊1")deftest2():print("我是模塊2")

5.1:模塊的引入

5.1.1:import

模塊定義好后闻蛀,我們可以使用 import 語句來引入模塊匪傍,語法如下

importmodule1[,module2[,...moduleN]]

test.py 文件代碼

importaaaa.test1()aa.test2()#我是模塊1#我是模塊2

導入python中的模塊os/math

代碼:開平方根

importmathprint(math.sqrt(4))#2

注意:一個模塊只會被導入一次,不管你執(zhí)行了多少次循榆。這樣可以防止導入模塊被一遍又一遍地執(zhí)行析恢。

5.1.2:from…import 語句

Python 的 from 語句讓你從模塊中導入一個指定的部分到當前命名空間中,語法如下

frommodnameimportname1[,name2[,...nameN]]

test.py 文件代碼

fromaaimporttest1test1()#我是模塊1

注意:只能調用導入的模塊中的部分秧饮,如果想使用test2,需要如下操作

fromaaimporttest1,test2test1()test2()#我是模塊1#我是模塊2

思考:如果需要導入模塊中的部分有很多映挂,怎么操作?

5.1.3:from…import * 語句

把一個模塊的所有內容全都導入到當前的命名空間也是可行的,只需使用如下聲明:

frommodnameimport*

test.py 文件代碼

fromaaimport*test1()test2()#我是模塊1#我是模塊2

擴展

使用__all__魔幻方法當被引入的包中有__all__=(),里面指定的才能被調用盗尸,調用的時候使用from模塊名import*

aa.py

__all__=('test1','test2')deftest1():print("我是模塊1")deftest2():print("我是模塊2")deftest3():print("我是模塊2")

test.py

fromaaimport*test1()test2()

六柑船、Python中的包

包是一個分層次的文件目錄結構,它定義了一個由模塊及子包泼各,和子包下的子包等組成的 Python 的應用環(huán)境鞍时。

簡單來說,包就是文件夾扣蜻,但該文件夾下必須存在init.py 文件, 該文件的內容可以為空逆巍。init.py 用于標識當前文件夾是一個包。

考慮一個在 day 目錄下的 runoob1.py莽使、runoob2.py锐极、init.py 文件,test.py 為測試調用包的代碼芳肌,目錄結構如下

test.pyday|--__init__.py|--runoob1.py|--runoob2.py

源代碼如下:

day/runoob1.py

defrunoob1():print"I'm in runoob1"

day/runoob2.py

defrunoob2():print"I'm in runoob2"

然后我們在 day同級目錄下創(chuàng)建 test.py 來調用 day 包

# 導入 Phone 包fromday.runoob1importrunoob1fromday.runoob2importrunoob2runoob1()runoob2()

結果

I'minrunoob1I'minrunoob2

補充python常用模塊

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末灵再,一起剝皮案震驚了整個濱河市肋层,隨后出現的幾起案子,更是在濱河造成了極大的恐慌翎迁,老刑警劉巖栋猖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異汪榔,居然都是意外死亡蒲拉,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門揍异,熙熙樓的掌柜王于貴愁眉苦臉地迎上來全陨,“玉大人,你說我怎么就攤上這事衷掷。” “怎么了柿菩?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵戚嗅,是天一觀的道長。 經常有香客問我枢舶,道長懦胞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任凉泄,我火速辦了婚禮躏尉,結果婚禮上,老公的妹妹穿的比我還像新娘后众。我一直安慰自己胀糜,他們只是感情好去件,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布乍构。 她就那樣靜靜地躺著绘迁,像睡著了一般修噪。 火紅的嫁衣襯著肌膚如雪巡验。 梳的紋絲不亂的頭發(fā)上辫封,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天砖第,我揣著相機與錄音荷腊,去河邊找鬼绍移。 笑死悄窃,一個胖子當著我的面吹牛,可吹牛的內容都是我干的蹂窖。 我是一名探鬼主播轧抗,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼恼策!你這毒婦竟也來了鸦致?” 一聲冷哼從身側響起潮剪,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎分唾,沒想到半個月后抗碰,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡绽乔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年弧蝇,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片折砸。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡看疗,死狀恐怖,靈堂內的尸體忽然破棺而出睦授,到底是詐尸還是另有隱情两芳,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布去枷,位于F島的核電站怖辆,受9級特大地震影響,放射性物質發(fā)生泄漏删顶。R本人自食惡果不足惜竖螃,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望逗余。 院中可真熱鬧特咆,春花似錦、人聲如沸录粱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽关摇。三九已至荒叶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間输虱,已是汗流浹背些楣。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留宪睹,地道東北人愁茁。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像亭病,于是被迫代替她去往敵國和親鹅很。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內容

  • 文件的作用 使用文件的目的:保存數據存放在磁盤 把一些存儲存放起來罪帖,可以讓程序下一次執(zhí)行的時候直接使用促煮,而不必重新...
    藝術家123閱讀 175評論 0 0
  • 1.1參數位置順序 案例:def sun(a,*args,b=22,**kwargs): print("a:",a...
    wen_b182閱讀 196評論 0 0
  • 1.1參數位置順序 案例:def sun(a,*args,b=22,**kwargs): print("a:",a...
    周園潔閱讀 164評論 0 0
  • 目錄具體內容 文件操作1:文件操作介紹 2:文件的打開與關閉 3:文件的讀寫 4:文件及文件夾的相關操作 異常處理...
    35e5e542b1fc閱讀 126評論 0 0
  • 目錄 一邮屁,python 字符串 二,Python列表(List) 三菠齿,Python 元組 四佑吝,Python字典 五...
    weiwei_js閱讀 335評論 0 0