日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python学习笔记(九)——文件和异常(重点)

發(fā)布時(shí)間:2025/3/21 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python学习笔记(九)——文件和异常(重点) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

學(xué)文件的目的:數(shù)據(jù)不能可能一直在內(nèi)存中存儲(chǔ),持久化存儲(chǔ)到磁盤就需要用到文件了!

一、文件和上下文管理器(重點(diǎn))

1、打開文件—open() 方法

Python open() 方法用于打開一個(gè)文件,并返回文件對(duì)象,在對(duì)文件進(jìn)行處理過(guò)程都需要使用到這個(gè)函數(shù),如果該文件無(wú)法被打開,會(huì)拋出 OSError。

注意:使用 open() 方法一定要保證關(guān)閉文件對(duì)象,即調(diào)用 close() 方法。

open() 函數(shù)常用形式是接收兩個(gè)參數(shù):文件名(file)和模式(mode)。

open(file, mode='r')

完整的語(yǔ)法格式為:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

參數(shù)說(shuō)明:

  • file: 必需,文件路徑(相對(duì)或者絕對(duì)路徑)。
  • mode: 可選,文件打開模式
  • buffering: 設(shè)置緩沖
  • encoding: 一般使用utf8
  • errors: 報(bào)錯(cuò)級(jí)別
  • newline: 區(qū)分換行符
  • closefd: 傳入的file參數(shù)類型
  • opener: 設(shè)置自定義開啟器,開啟器的返回值必須是一個(gè)打開的文件描述符。

常用mode 參數(shù);

模式描述
r以只讀方式打開,文件指針默認(rèn)放在文件開頭,文件不存在則報(bào)錯(cuò)
r+打開一個(gè)文件用于讀寫,文件指針默認(rèn)放在文件開頭,文件不存在則報(bào)錯(cuò)
w打開一個(gè)文件只用于寫入,如果該文件已存在則將其覆蓋(你可以理解為之前寫的內(nèi)容會(huì)被覆蓋),如果不存在,創(chuàng)建新文件
w+打開一個(gè)文件用于讀寫,如果該文件已存在則將其覆蓋,如果不存在,創(chuàng)建新文件
a打開一個(gè)文件 用于追加,如果文件存在,文件指針會(huì)放到文件結(jié)尾(也就是說(shuō),新的內(nèi)容將會(huì)被寫入到已有內(nèi)容之后),如果不存在,創(chuàng)建新文件進(jìn)行寫入
a+打開一個(gè)文件用于讀寫,如果文件存在,文件指針會(huì)放到文件結(jié)尾,如果不存在,創(chuàng)建新文件進(jìn)行寫入

注意:默認(rèn)為文本模式,其他模式:rb rb+ wb wb+ ab ab+ 加b的作用,以二進(jìn)制的格式打開文件,進(jìn)行上述操作如果要以二進(jìn)制模式打開,加上 b 。

2、file 對(duì)象

file 對(duì)象使用 open 函數(shù)來(lái)創(chuàng)建,下表列出了 file 對(duì)象常用的函數(shù):

操作方法
讀取指定大小的內(nèi)容f.read()
讀取一行的內(nèi)容f.readline()
讀取多行內(nèi)容f.readlines()
寫入內(nèi)容f.write(data)
寫入多行(需要自己加換行符)f.writelines(lines)
立即刷新緩沖(相當(dāng)于文件保存)f.flush()
獲得游標(biāo)位置f.tell()
調(diào)整游標(biāo)位置f.seek(position)

Python 文件 flush() 方法是用來(lái)把文件從內(nèi)存buffer(緩沖區(qū))中強(qiáng)制刷新到硬盤中,同時(shí)清空緩沖區(qū)。
一般情況下,文件關(guān)閉后會(huì)自動(dòng)刷新到硬盤中,但有時(shí)你需要在關(guān)閉前刷新到硬盤中,這時(shí)就可以使用 flush() 方法。

實(shí)例:

f = open(r'it.txt', 'w+') # 先清空在寫 print(f.read()) f.close()f = open(r'it.txt','w+') print(f.write('hello world'))# 11 print(f.write('hello world\n'))# 12 print(f.write('hello world'))# 11print(f.tell()) # 指針?biāo)诘奈恢?/span> print(f.seek(0)) #兩個(gè)參數(shù) 一個(gè)是偏移量 f.close()

執(zhí)行結(jié)果:

11 12 11 35 0

注意:在Windows系統(tǒng)中 一行結(jié)束的標(biāo)志是\r\n 它會(huì)把\n轉(zhuǎn)化成\r\n

3、with open…as…(上下文件管理器)

一旦跳出這個(gè)語(yǔ)句塊 ,就自動(dòng)就幫你關(guān)掉了 ,這就是上下文管理器,with能夠自動(dòng)關(guān)閉文件,不需要執(zhí)行close方法

**實(shí)例 **
(我這里就不一一運(yùn)行了)

實(shí)例1 with open('it.txt','w+') as f:print(f.write('hello world\n'))print(f.write('hello world\n'))f.flush()print(f.tell())f.seek(0,0)print(f.read())實(shí)例2 with open('it.txt','r+') as f: # 多行讀取print(f.readlines()[2]) # 可以切片實(shí)例3 with open('it.txt','w+') as f: # 多行寫入f.writelines(['hello\n','world']) #怎么讀出來(lái) 就怎么寫進(jìn)去f.seek(0) #讀寫都會(huì)導(dǎo)致指針的移動(dòng)print(f.read())實(shí)例4 #如果使用二進(jìn)制寫入 能否不用二進(jìn)制讀取? with open('it.txt','wb+') as f:f.write('我們永遠(yuǎn)記得你'.encode())f.seek(0)a =f.read()print(a) # print(a.decode())實(shí)例5 #圖片操作 with open(r"D:\test\03.jpg",'rb+') as f: #第一個(gè)r作用:反轉(zhuǎn)義a = f.read()with open(r"test3.jpg",'wb+') as f1:f1.write(a)實(shí)例6 # 一個(gè)with能不能打開多個(gè)文件? with open(r'it.txt','w+') as f,\open(r'it.txt','a+') as f1:f.writelines(['hello\n','world'])f.seek(0)f1.seek(0)print(f1.read())print(f.read())實(shí)例7 with open(r'it.txt','r') as f1:with open(r'test2.txt','w') as f2:a = f1.read()print(a)f2.write(a)

總結(jié):上下文管理器 不單單在文件里面有運(yùn)用,在其他的地方也用的非常平凡,文件的操作在爬蟲上用的非常之多

二、認(rèn)識(shí)異常(重點(diǎn))

在了解異常之前我們應(yīng)該了解異常是什么?
異常的本身是類的實(shí)例。

學(xué)習(xí)異常目的:異常的掌握是程序員的基本要求,以后所有的bug 都可以通過(guò)異常的學(xué)習(xí) 開始自己排查錯(cuò)誤

PEP8

1 縮進(jìn)與換行 每級(jí)縮進(jìn)使用四個(gè)空格 2 限制每行的最大長(zhǎng)度為79個(gè)字符 3 空行頂層函數(shù)和類之間使用兩個(gè)空行類的方法之間用一個(gè)空行在函數(shù)中使用空行表示不同邏輯段落 4 導(dǎo)入位于文件的頂部 5 避免多余空格 6 注釋注釋要保持與時(shí)俱進(jìn) 一句后面兩個(gè)空格 跟注釋 7 命名規(guī)范除了正常的命名規(guī)范外不要使用 大小寫的L 大寫的O 作為變量名類名首字母大寫 內(nèi)部類 加上前導(dǎo)下劃線函數(shù)名應(yīng)該小寫 增強(qiáng)可讀性可以使用下劃線分割 8 其他別用 ‘==‘ 進(jìn)行布爾值 和 True 或者 False 的比較 應(yīng)該用 is

1、異常基礎(chǔ)

在 Python 中所有的異常都是繼承自 BaseException 直接分為四大類: SystemExit:Python退出異常 KeyboardInterrupt: 鍵盤打斷(Ctrl+C) GeneratorExit: 生成器退出 Exception: 普通異常(只會(huì)使用這部分的異常)除此之外還有一些我們常見的異常: NameError 變量名錯(cuò)誤 TypeError 類型錯(cuò)誤 SyntaxError 語(yǔ)法錯(cuò)誤

2、異常處理

2.2.1、try/except

異常捕捉可以使用 try/except 語(yǔ)句

舉個(gè)簡(jiǎn)單的例子:

try:print('---1--')print(a)# 沒有定義print('----3---') except: #補(bǔ)救措施print('補(bǔ)救措施')執(zhí)行結(jié)果: ---1-- 補(bǔ)救措施 #這里a沒有定義,所以print(‘--3--’)不會(huì)執(zhí)行,由于用了try/except這里不會(huì)報(bào)錯(cuò)

一個(gè)except子句可以同時(shí)處理多個(gè)異常,這些異常將被放在一個(gè)括號(hào)里成為一個(gè)元組,例如

except (RuntimeError, TypeError, NameError):pass

當(dāng)然except也可以每次處理一個(gè)異常,就像if··elif那樣,例如:

# 捕獲具體的異常 try:a# 1/0# print(‘nihao’) # 語(yǔ)法錯(cuò)誤捕獲不到 except NameError:# 只能捕獲具體異常 漏寫的會(huì)打印出來(lái)print('類型錯(cuò)誤1') except ZeroDivisionError:print('分母不能為0') except Exception:# 代碼里邊異常的一個(gè)基類 未知異常,代碼有錯(cuò)就執(zhí)行print('未知錯(cuò)誤2')執(zhí)行結(jié)果: 類型錯(cuò)誤1 #a未定義屬于NameError類型錯(cuò)誤,所以只執(zhí)行打印類型錯(cuò)誤1

2.2.2、try/except…else

try/except 語(yǔ)句還有一個(gè)可選的 else 子句,如果使用這個(gè)子句,那么必須放在所有的 except 子句之后。

else 子句將在 try 子句沒有發(fā)生任何異常的時(shí)候執(zhí)行。

下面舉個(gè)簡(jiǎn)單的例子:

try:f = open('it.txt', 'r') except IOError:print('cannot open', 'it.txt') else:print('it.txt', 'has', len(f.readlines()), 'lines')f.close()執(zhí)行結(jié)果: it.txt has 1 lines

2.2.3、try-finally 語(yǔ)句

ry-finally 語(yǔ)句無(wú)論是否發(fā)生異常都將執(zhí)行最后的代碼。

以下實(shí)例中 finally 語(yǔ)句無(wú)論異常是否發(fā)生都會(huì)執(zhí)行:

try:runoob() except NameError as error:print('聲明錯(cuò)誤:%s'%error) else:print('try執(zhí)行成功!') finally:print('這句話,無(wú)論異常是否發(fā)生都會(huì)執(zhí)行。')執(zhí)行結(jié)果: 聲明錯(cuò)誤:name 'runoob' is not defined 這句話,無(wú)論異常是否發(fā)生都會(huì)執(zhí)行。

總結(jié):異常的處理對(duì)于我們后續(xù)的邏輯有很大的幫助,在項(xiàng)目中不會(huì)應(yīng)為個(gè)人原因或者網(wǎng)絡(luò)原因?qū)е孪到y(tǒng)的直接崩潰,而是利用對(duì)應(yīng)的錯(cuò)誤處理返回對(duì)應(yīng)的提示信息,提升產(chǎn)品的體驗(yàn)度

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的python学习笔记(九)——文件和异常(重点)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本不卡视频在线播放 | 一区二区三区www污污污网站 | 久久亚洲综合色 | 99久久99久久精品国产片 | 久久国产精品久久精品国产 | 桃色视屏 | 午夜免费福利视频 | 2024av视频 | 中文字幕视频免费 | 欧美日本一区 | 国产又粗又黄又爽又硬 | 免费一级毛片麻豆精品 | 欧美日韩在线免费观看视频 | 国产av无码国产av毛片 | 中文字幕高清在线播放 | 久草91| 国产av天堂无码一区二区三区 | 日本综合视频 | 国产在线拍揄自揄拍无码 | 国产精品久久影院 | 欧洲成人在线视频 | 欧美亚洲综合网 | 日韩一中文字幕 | 精品国产99 | 香蕉大久久 | 这里有精品视频 | 狠狠人妻久久久久久综合 | 欧美日韩国产电影 | 欧美一区二区三区四区在线 | 中国丰满人妻videoshd | 精品蜜桃av | 久久福利小视频 | 人人草在线视频 | 韩国甜性涩爱 | 午夜日韩电影 | 日本一区二区免费看 | 在线视频中文字幕 | 日韩一级视频在线观看 | 天堂资源av | 一级黄色片在线观看 | 亚洲成人av电影在线 | julia中文字幕在线 | 久久噜噜噜精品国产亚洲综合 | 成人h动漫精品一区二区无码 | 懂色av一区二区三区四区五区 | 在线视频精品 | 亚欧美一区二区三区 | 日韩av在线播放不卡 | 美女伦理水蜜桃4 | wwwxxx日本免费| 一级黄片毛片 | 99999精品视频 | 大度亲吻原声视频在线观看 | 色七七桃花综合影院 | julia一区二区 | 欧美中文一区 | 久久精品不卡 | 国产a级一级片 | 精品黑人| 国产欧美一区二区三区在线看蜜臂 | 久久久麻豆 | 国产精品国产自产拍高清av | 人人爽人人爽人人爽 | 校霸被c到爽夹震蛋上课高潮 | 欧美一区二区三区免费 | 91成人免费在线观看视频 | 夜夜嗨av一区二区三区四区 | 激情无码人妻又粗又大 | 亚洲国产精品区 | 日韩精品一二三四 | 四虎色| 欧美人与动牲交xxxxbbbb | 三级中文字幕在线 | 色哟哟中文字幕 | 国产精品久免费的黄网站 | 欧美黑人一区二区三区 | 在线中文字幕第一页 | 亚洲高清一区二区三区 | 91操人视频 | 91亚洲精品国偷拍自产在线观看 | 爱情岛论坛亚洲入口 | 看国产黄色片 | 天天干人人 | 一本色道久久88综合日韩精品 | 国产欧美日韩精品一区二区三区 | 日日操夜夜爽 | 国产成人精品亚洲男人的天堂 | 久久中文视频 | 中国毛片网站 | 国产区一二 | 69毛片| 亚洲久爱| 国产精品啪| 欧美午夜性 | 黄色理论片 | 99久久精品国产一区二区成人 | 国产欧美一区二区三区视频在线观看 | 综合视频一区二区 | 成人有色视频 |