日韩性视频-久久久蜜桃-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ò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国自产拍偷拍精品啪啪一区二区 | 三上悠亚激情av一区二区三区 | 免费黄色三级 | 国产乱淫av一区二区三区 | 芭乐视频色 | 黑人vs亚洲人在线播放 | 都市激情自拍 | 国产精品久久久久免费 | 福利小视频 | 成年人黄色在线观看 | 久久国产a | 欧美乱妇狂野欧美视频 | 人妻va精品va欧美va | 91中文字幕视频 | 欲涩漫入口免费网站 | 91成人在线观看高潮 | 二区中文字幕 | 欧美日韩中出 | 嫩草在线观看 | 精品视频| 秋霞伦理一区二区 | 国产精品xxx在线观看 | www久久久com | 香蕉久久av| 少妇饥渴放荡91麻豆 | 国产精品一二三四五区 | 国产精品久久久久电影 | 成年人在线观看视频网站 | 国产精品国产a级 | 日本天堂在线观看 | 黑人3p波多野结衣在线观看 | 色狠狠久久av大岛优香 | 人妻体内射精一区二区 | 午夜男人网 | 欧美一级黄色片网站 | 午夜伦伦电影理论片费看 | 色人阁婷婷| 日韩久久一区二区三区 | 成人综合在线观看 | 91打屁股| 免费看日韩av | 国产福利一区二区视频 | 亚洲精品一区二区三区四区五区 | 亚洲一区二区av在线 | 丝袜美腿亚洲一区二区图片 | av图片在线观看 | 亚洲精品18在线观看 | 欧美国产日本 | 亚洲欧美在线成人 | 久久久久久无码午夜精品直播 | 日本美女啪啪 | 成人小视频在线 | 国产精品久久9 | 天天干天天日夜夜操 | 精品一区精品二区 | 中国无码人妻丰满熟妇啪啪软件 | 揉我啊嗯~喷水了h视频 | 欧美一级特黄aaaaaa大片在线观看 | 不许穿内裤随时挨c调教h苏绵 | 欧美在线资源 | 成年人看的羞羞网站 | 亚洲大胆人体 | 成人免费黄色网址 | 天天干天天操天天玩 | 在线观看精品国产 | 91中文在线观看 | 探花视频在线版播放免费观看 | 精品国产视频在线 | 午夜香蕉网 | 人妻精油按摩bd高清中文字幕 | 蜜乳av一区 | 色小说综合 | 久久国产精品久久久 | 国产美女免费看 | 五月天色丁香 | 亚洲国产精彩视频 | www网站在线免费观看 | 国产簧片| 国产一级片精品 | 欧美激情片一区二区 | 韩日视频 | 99嫩草| 男女拍拍拍 | 色综合av在线 | 97se.com| 成人一级黄色 | 瑟瑟视频在线观看 | 第一页在线视频 | 一区二区毛片 | 精品国产一区二区三区久久 | 亚洲欧美乱综合图片区小说区 | 波多野结衣之潜藏淫欲 | 欧美精品二区三区 | 亚洲精品一区二区三区新线路 | 黄色网www | 国产簧片 | 亚洲一区精品在线观看 | 国产精品999| 在线观看国产区 |