python基礎(文件、異常、模塊、類、對象)

文件:

  • 打開文件使用open函數,open()的第一個參數是:要打開文件的路徑,如果只傳入文件名那么將在當前文件下查找文件并打開。第二個參數是:文件的打開模式,其他參數都是默認的。文件的打開模式如下圖所示:

在這里插入圖片描述

f=open('C:\\Users\\Lenovo\\Desktop\\test.txt','r')
f#這個f是文件對象
<_io.TextIOWrapper name='C:\\Users\\Lenovo\\Desktop\\test.txt' mode='r' encoding='cp936'>
#這里name是取自的路徑,mode是打開的模式,encoding是編碼格式

文件的讀取操作:

需要用到以下幾個文件對象方法:
在這里插入圖片描述

f=open('C:\\Users\\Lenovo\\Desktop\\test.txt','rt',encoding="utf-8")
以只讀文本模式打開文件,編碼是utf-8
str3=f.read()
str3
'年后ijrgwingjnvjnjfdnv困難克服斯諾克女可男可女開心呢可能可男可女可能可男可女 可能發生空空死你女那oadnfkln'
f.tell()
144#文件光標的位置,打開開文件時,光標在文件頭,進行讀取操作后光標會發生移動
f.seek(0,0)
0#將光標移動到文件的頭
f.close()#關閉文件f=open('C:\\Users\\Lenovo\\Desktop\\test2.txt','w',encoding="utf-8")
str4="這是一個新文件"
f.write(str4)#返回寫入文件的字節數
7
f.close()
#寫完后關閉后才會寫入,不關閉存在緩沖區里面想要將文件里的內容迭代輸出的話可以使用for循環
方法一:先將文件對象轉化為序列再輸出
for each in list(b):print(each)這是一個新文件這是一個新文件這是一個新文件這是一個新文件這是一個新文件方法二:直接對文件對象進行操作(推薦使用)
for each in b:print(each)這是一個新文件這是一個新文件這是一個新文件這是一個新文件這是一個新文件

模塊:

  • 模塊就是可用代碼段的打包,模塊是一個包含你所定義的所有函數和變量的文件,后綴是.py。模塊可以被別的程序引入,以使用該模塊中的函數等功能。
  • 我們所知道常用的操作系統就有:Windows、Mac OS、Linux、UNIX等,這些操作系統底層對于文件系統的訪問工作原理是不一樣的,因此你可能就要針對不同的操作系統來考慮使用哪些文件系統模塊,這樣的做法非常不友好且麻煩,因為這樣意味著當你的程序運行環境一改變,你就要相應的去修改大量代碼來應付。那么有了OS模塊,我們不需要關心什么操作系統下使用什么模塊,OS模塊會幫助你選擇正確的模塊并調用。

os模塊中關于文件/目錄常用的函數使用方法

pickle模塊:

這個模塊幾乎可以將prthon的對象轉化為二進制的形式取放字節流。
存放:picking,讀取:unpicking,pickle模塊的使用:

my_list=["123",123,["hello",3.14]]
my_list
['123', 123, ['hello', 3.14]]
pick_file=open("C:\\Users\\Lenovo\\Desktop\\","wb")#注意要使用wb的方式創建文件
pickle.dump(my_list,pick_file)#將列表以二進制的方式存入到文件中
pick_file.close()#關閉該文件,只有關閉后才會保存到文件中去如果要讀取的話:
pick_file=open("C:\\Users\\Lenovo\\Desktop\\test.pkl","rb")#先將文件以二進制可讀的方式打開
my_list2=pickle.load(pick_file)#文件利用load讀取到my_list2列表
my_list2
['123', 123, ['hello', 3.14]]

異常處理:

Python標準異常總結

  • AssertionError 斷言語句(assert)失敗
  • AttributeError 嘗試訪問未知的對象屬性
  • EOFError 用戶輸入文件末尾標志EOF(Ctrl+d)
  • FloatingPointError 浮點計算錯誤
  • GeneratorExit generator.close()方法被調用的時候
  • ImportError 導入模塊失敗的時候
  • IndexError 索引超出序列的范圍
  • KeyError 字典中查找一個不存在的關鍵字
  • KeyboardInterrupt 用戶輸入中斷鍵(Ctrl+c)
  • MemoryError 內存溢出(可通過刪除對象釋放內存)
  • NameError 嘗試訪問一個不存在的變量
  • NotImplementedError 尚未實現的方法
  • OSError 操作系統產生的異常(例如打開一個不存在的文件)
  • OverflowError 數值運算超出最大限制
  • ReferenceError 弱引用(weak reference)試圖訪問一個已經被垃圾回收機制回收了的對象
  • RuntimeError 一般的運行時錯誤
  • StopIteration 迭代器沒有更多的值
  • SyntaxError Python的語法錯誤
  • IndentationError 縮進錯誤
  • TabError Tab和空格混合使用
  • SystemError Python編譯器系統錯誤
  • SystemExit Python編譯器進程被關閉
  • TypeError 不同類型間的無效操作
  • UnboundLocalError 訪問一個未初始化的本地變量(NameError的子類)
  • UnicodeError Unicode相關的錯誤(ValueError的子類)
  • UnicodeEncodeError Unicode編碼時的錯誤(UnicodeError的子類)
  • UnicodeDecodeError Unicode解碼時的錯誤(UnicodeError的子類)
  • UnicodeTranslateError Unicode轉換時的錯誤(UnicodeError的子類)
  • ValueError 傳入無效的參數
  • ZeroDivisionError 除數為零

程序運行過程中可能會拋出某些異常,但是這些異常不會使程序崩潰。那么如何檢測和處理這些異常呢?

  • 異常的檢測可以使用try語句,try語句捕獲到異常時,異常后面的語句將不會被執行會被跳過。
    在這里插入圖片描述
    栗子:
try:f=open("hhhh.txt")print(f.read())f.close()
except OSError:print("文件出錯")如果使用as reason這個可選的參數:
try:f=open("hhhh.txt")print(f.read())f.close()
except OSError as reason:print("文件出錯\n錯誤的原因是:"+str(reason))文件出錯
錯誤的原因是:[Errno 2] No such file or directory: 'hhhh.txt'要捕獲多個異常(try語句捕獲到異常時,異常后面的語句將不會被執行會被跳過,所以第二個異常沒有被打印):
try:sum=1+'1'f=open("hhhh.txt")print(f.read())f.close()
except OSError as reason:print("文件出錯\n錯誤的原因是:"+str(reason))
except TypeError as reason:print("類型出錯\n錯誤的原因是:"+str(reason))類型出錯
錯誤的原因是:unsupported operand type(s) for +: 'int' and 'str'以下方式可以檢測多個異常:
try:sum=1+'1'f=open("hhhh.txt")print(f.read())f.close()
except (OSError,TypeError):print("出錯")如果想只要程序中出現異常,不管是什么類型的都有提示,可以這樣做(不推薦):
try:sum=1+'1'f=open("hhhh.txt")print(f.read())f.close()
except:print("出錯")
  • 另一個實現方式
    在這里插入圖片描述

栗子:

try:f=open("C:\\Users\\Lenovo\\Desktop\\hhhh.txt","w")sum=1+'1'f.close()
except (OSError,TypeError):print("出錯")
finally:#這里面的語句無論如何都會被執行f.close()#防止因異常退出而文件沒有被關閉,而導致數據丟失
  • 可以使用raise語句自己引發一個異常,只需要在raise后面加上一個異常的名稱就好。例如:raise ZeroDivisionError引發除0異常。也可以:raise ZeroDivisionError("除數為0")

豐富的else語句:
else語句可以和if語句配合使用:要么怎樣,要么不怎樣。還可以和while、for循環語句搭配使用:干完了能怎樣,干不完就別想怎樣。還能和異常處理語句搭配使用:沒有問題就干吧。

  • 當else和循環配合使用的話,如果循環里面的代碼正常的執行完,沒有使用break等退出,則會執行循環外else后面的代碼。
while:正常退出
else:這里會被執行,否則不被執行
  • 只要try語句塊里面沒有出現任何的異常,將會執行else里面的語句
try:int("abc")
except ValueError as reason:print("出錯了"+str(reason))
else:print("沒有任何異常")

簡潔的with語句:
with在你使用完文件忘記關閉后,with語句就會幫助你關閉。

try:with open("hhhh.txt")as fd:#fd是文件標簽print(f.read())#注意代碼的縮進with下面要將代碼縮進
except OSError as reason:print("文件出錯\n錯誤的原因是:"+str(reason))

對象:
對象就是屬性加方法,靜態的特征稱為屬性,動態行為稱為方法。在pyhton中約定類名以大寫字母開頭,函數以小寫字母開頭,注意: 如果屬性的名字和方法相同,屬性會將方法覆蓋掉。那么:1、不要試圖在一個類里面定義出所有能想到的特性和方法,應該利用繼承和組合機制進行擴展。2、用不同的詞性命名,如屬性用名詞,方法名用動詞。

類的定義:

class Turtle:#屬性color="green"weight=10#方法def climb(self):#self相當于C++的this指針,在python中定義類的時候默認self作為第一個參數print("爬行")t=Turtle()#生成類對象,創建類的實例對象
t.climb()#適用類方法

繼承:

是子類自動共享父類之間數據和方法的機制,子類繼承父類所有的屬性和方法,如果子類中定義與父類同名的方法或屬性,則會自動覆蓋父類對應的方法或屬性,對父類不受影響,當子類重寫父類的構造方法時,如果還想有父類的功能,那么有兩種方法:1、調用未綁定的父類方法(只需要在子類構造方法中,寫上父類的名字.構造方法名稱,調用父類的構造函數即可)2、使用super函數(只需要在子類構造方法中通過super函數調用父類的構造方法即可:surper().__init__(),括號里面self也不用寫)。多重繼承: 一個子類繼承多個父類,寫法:class Son(father1,father2,.....)

class MyList (list):pass
#pass表示占位符,表示不做任何事情,list表示繼承list>>> class Parent:def hello(self):print("父類方法在子類中被調用")>>> class Son(Parent):pass>>> 
>>> d=Son()
>>> d.hello()
父類方法在子類中被調用>>> class Son(Parent):def hello(self):print("子類覆蓋父類方法")>>> C=Son()
>>> C.hello()
子類覆蓋父類方法

多態: 不同對象對同一方法響應不同的行動。也就是不同類里面定義方法的名相同但是方法的內容不同。

>>> class First:def func(self):print("hello")>>> class Second:def func(self):print("你好")>>> a=First()
>>> a.func()
hello
>>> b=Second()
>>> b.func
>>> b.func()
你好
>>> 

構造函數: 需要用到函數_ _init_ _(self)方法,在對象實例化時,傳入參數,可以重寫_ _init_ _(self)方法來初始化對對象的操作。

class New:def _init_(self,name):self.name=namedef func(self):print("%s爬"%self.name)
>>> b=New("給我")
>>> b.func()
給我爬

公有和私有:

在pyhton中沒有像c++一樣的關鍵字來說明公有還是私有。默認對象的屬性和方法都是公有的可以通過.操作符訪問,為了實現私有變量的特征,python內部采用了name mangling(名字改編,名字重整)技術,在python中定義私有變量只需要在變量名或者函數名前加上_ _兩個下劃線,那么這個函數或變量就會為私有的了。這樣外部就無法訪問到了。

>>> class New:__name="小魚醬"#私有的def func(self):return self.__name>>> a=New()
>>> a.func()
'小魚醬'
>>> a._New__name#其實python的私有機制是偽私有,可以通過這種方式訪問私有變量
'小魚醬'
>>> 

組合:把類的實例化給放到新類里面,這樣就把舊類組合進去了

class Turtle:def __init__(self,x):self.num=x
class Fish:def __init__(self,x):self.num=x
class Pool:def __init__(self,x,y):self.turtle=Turtle(x)#turtle是烏龜的實例化對象self.fish=Fish(y)#fish是小魚的實例化對象def print_num(self):print("水池里總共烏龜有%d只,小魚%d只"% (self.turtle.num,self.fish.num))>>> pool=Pool(1,10)
>>> pool.print_num()
水池里總共烏龜有1只,小魚10

什么是綁定?
python嚴格要求方法需要有實例才能被調用,這種限制其實就是python所謂的綁定概念。

一些與類相關的BIF:

  • issubclass(class,classinfo)如果class是classinfo的一個子類,那么返回True,注意:一個類被認為是其自身的子類,classinfo可以是類對象組成的元組,只要class是其中任何一個候選的子類,則返回True。所有類默認繼承自object。
  • isinstance(object,classinfo)用來檢查一個實例對象是否屬于一個類,第一個參數是實例對象,第二個參數類,同樣第二個參數也可以是元組,元組里面有多個類,屬于則返回True否則返回False
  • hasattr(object,name)用來測試一個對象里面是否有指定的屬性,第一個參數是對象,第二個參數是指定的屬性名,注意:要檢查的屬性名要用字符串括起來,否則編譯器會將其認為變量可能引發異常
  • getattr(object,name[,default])用來返回對象指定的屬性值,如果屬性不存在同時又沒有設置default的值,那么她會拋出異常,如果有設置default的值則會打印default的值。
  • setattr(object,name,value)用來設置對象中指定屬性的值,如果屬性不存在,它會新建這個屬性并且給他賦值,屬性同樣要加單引號。
  • delattr(object,name)用來刪除對象中指定的屬性,如果屬性不存在則拋出異常。
  • property(fget=None,fset=None,fdel=None,doc=None)是用來通過屬性設置屬性,返回值是一個屬性。第一個參數是獲得屬性的方法,第二個參數是設置屬性的方法,第三個參數是刪除屬性的方法。使用如下圖:
    在這里插入圖片描述小甲魚干貨

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/272191.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/272191.shtml
英文地址,請注明出處:http://en.pswp.cn/news/272191.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

redis 和 memcached 的區別

redis 和 memcached 的區別 對于 redis 和 memcached 我總結了下面四點。現在公司一般都是用 redis 來實現緩存&#xff0c;而且 redis 自身也越來越強大了&#xff01; redis支持更豐富的數據類型&#xff08;支持更復雜的應用場景&#xff09;&#xff1a;Redis不僅僅支持簡…

樹莓派入門(樹莓派登錄的幾種方式)

什么是嵌入式&#xff1f; 嵌入式即嵌入式系統&#xff0c;IEEE&#xff08;美國電氣和電子工程師協會&#xff09;對其定義是用于控制、監視或者輔助操作機器和設備的裝置&#xff0c;是一種專用的計算機系統。國內普遍認同的嵌入式系統定義是以應用為中心&#xff0c;以計算…

git 如何刪除本地創建的倉庫(轉載自 https://segmentfault.com/q/1010000002996177?_ea=262685)...

可以先清除本地文件夾下的git文件&#xff0c;然后在重新初始化新建的git倉庫 //刪除文件夾下的所有 .git 文件 find . -name ".git" | xargs rm -Rf接著add&#xff0c;commit等操作即可轉載于:https://www.cnblogs.com/xiahl/p/5289266.html

mysql中SQL查詢優化方法總結

1.對查詢進行優化&#xff0c;應盡量避免全表掃描&#xff0c;首先應考慮在 where 及 order by 涉及的列上建立索引。 2.應盡量避免在 where 子句中對字段進行 null 值判斷&#xff0c;否則將導致引擎放棄使用索引而進行全表掃描&#xff0c;如&#xff1a;select id from t w…

Linux庫概念及相關編程(動態庫、靜態庫、環境變量)

分文件編程&#xff1a; 好處&#xff1a;分模塊編程思想&#xff0c;功能和責任劃分清楚便與調試&#xff0c;main函數簡潔&#xff0c;代碼易于閱讀。編程時頭文件有的是使用<>這個符號括起來的&#xff0c;有的是" "使用的是雙引號&#xff0c;使用尖括號括…

復利計算器

import java.util.Scanner;public class Fulijisuan {public static void main(String[] args) {// TODO Auto-generated method stubdouble F0;double singlesum0;double doublesum0;double m0;Scanner scanner new Scanner(System.in);System.out.println("1:復利計算\n…

kali掃描內網ip_Metasploit路由轉發實現內網滲透

利用背景在滲透的過程中常常會遇到這種場景&#xff1a;我們已經通過web滲透拿下一臺內網服務器&#xff0c;為了進一步進行內網滲透&#xff0c;我們會利用“淪陷主機”作為跳板進行進一步的內網滲透&#xff0c;擴大戰果。現在假設的場景是此時我們已經拿下一臺內網服務器的遠…

.NET Core 3.0 中的新變化

譯者&#xff1a;楚人Leo譯文&#xff1a;http://www.cnblogs.com/leolion/p/10585834.html原文&#xff1a;https://msdn.microsoft.com/en-us/magazine/mt848631.aspx.NET Core 3.0 是 .NET Core 平臺的下一主要版本。本文回顧 .NET Core 發展歷史&#xff0c;并展示了它是如…

樹莓派GPIO口的使用(外設相關開發WringPi庫的使用,超聲波、繼電器)

樹莓派的接口&#xff1a; 大而簡單的類別&#xff1a;IO口&#xff0c;input和output是相對于主控芯片來說的&#xff0c;是根據MCU和外設之間的關系將IO口的功能分為output和input。當IO作為input使用時外設有&#xff1a;人體傳感器、煙霧傳感器、火焰傳感器、振動傳感器等…

下拉框+搜索插件

chosen 轉載于:https://www.cnblogs.com/ilikeballs/p/5291983.html

volatile指令重排_有多少人面試栽到Volatile上?面試問題都總結到這兒了

Volatile關鍵字volatile 是Java虛擬機提供的 輕量級 的同步機制.何為 輕量級 呢&#xff0c;這要相對于 synchronized 來說。Volatile有如下三個特點。要搞清楚上面列舉的名詞 可見性 原子性 指令重排 的含義我們需要首先弄清楚JMM(Java內存模型是怎么回事)JMM規定了內存主要劃…

Dubbo核心概念

節點角色規范 節點角色規格Provider提供者公開遠程服務Consumer消費者致電遠程服務Registry注冊表負責服務發現和配置Monitor監視器計算服務調用的數量和耗時Container容器管理服務的生命周期 服務關系 Container負責啟動&#xff0c;加載和運行服務Provider。ProviderRegiste…

良心推薦11款可以稱得上“神器”的Windows工具集合

1、最快文件搜索工具 Everything&#xff1a;當之無愧的最強本地文件搜索神器&#xff0c;搜索任何關鍵詞基本是秒速出現&#xff0c;比Windows自帶的搜索快了太多&#xff0c;電腦文件比較多的人必備&#xff01; 2、專業軟件卸載器 Revo Uninstaller Pro&#xff1a;Windows電…

HDU 2461 Rectangles#容斥原理

http://acm.hdu.edu.cn/showproblem.php?pid2461 題目很簡單&#xff0c;但是由于詢問數M可以很大&#xff0c;所以容易超時&#xff0c;這道題學到了在結構體里面寫函數的方法&#xff0c;這樣子效率更高&#xff0c;否則的話&#xff0c;這道題就TLE了。 根據容斥原理&#…

LD3320語音識別模塊二次開發及與樹莓派間的通訊

實物圖如下&#xff1a; 一般這種模塊的資料廠家都會給&#xff0c;需要的話可以私信我發郵箱&#xff0c;下面介紹該模塊的各種參數。型號&#xff1a;YS-LDV7名稱&#xff1a;一體化語音識別模塊規格&#xff1a;43*29.7MM供電電壓&#xff1a;5V &#xff08;內部工作電壓…

HTTP的長鏈接和短鏈接說明

HTTP的長鏈接和短鏈接實際上是TCP的長連接和短鏈接。首先我們先介紹一下TCP/IP協議組四層模型。其中包括以下&#xff1a; 應用層&#xff1a;HTTP、FTP、DNS、TELNET等協議傳輸層&#xff1a;TCP、UDP網絡層&#xff1a;IP、ARP、RARP、ICMP協議等網絡接口層&#xff1a;是TC…

多生產者_你是生產者還是消費者?這決定了你的層次。

不知道你有沒有注意到&#xff0c;每天乘坐地鐵上下班的時候&#xff0c;大部分人都在刷劇、看視頻、打游戲等等&#xff0c;總之都屬于玩樂。用生產和消費的關系來看的話&#xff0c;其實這一大部分人都屬于消費者&#xff0c;“時間和注意力”是他們用于交換的籌碼&#xff1…

eclipse Android 開發基礎 Activity 窗體 界面

eclipse Android 開發基礎 新建工程 新建布局layout,new Android Activity就相當于窗體Form。 新建Activity自動生成src下同名的java代碼。 public class Tform2activity extends Activity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(saved…

8 種常被忽視的 SQL 錯誤用法

來源&#xff1a;http://t.cn/R6UMaA11、LIMIT 語句2、隱式轉換3、關聯更新、刪除4、混合排序5、EXISTS語句6、條件下推7、提前縮小范圍8、中間結果集下推總結sql語句的執行順序&#xff1a;FROM <left_table>ON <join_condition><join_type> JOIN <right…