1. 程式人生 > >python之文件操作、OS模塊、面向對象

python之文件操作、OS模塊、面向對象

文件系統、OS、面向對象

一 文件操作

1 文件系統和文件

在磁盤上讀寫文件的功能都是由操作系統提供的,現代操作系統不允許普通的程序直接操作磁盤,所以,讀寫文件就是請求操作系統打開一個文件對象(通常稱為文件描述符),然後,通過操作系統提供的接口從這個文件對象中讀取數據(讀文件),或者把數據寫入這個文件對象(寫文件)。
文件是計算機中由OS管理的具有名字的存儲區域,在Linux中,文件是被看做字節序列

2 python內置的打開文件的方式open讀取

1 文件打開open

open(文件目錄(可以是絕對路徑和相對路徑)[文件打開模式][文件輸出緩存])
後面兩項是可選參數。默認返回是一個文件對象的內存,其默認的讀寫模式是只讀模式,

技術分享圖片
可以通過賦值進行輸出結果read(輸出的字節數)默認是全部
技術分享圖片
技術分享圖片
通過參數指定讀取的範圍:
技術分享圖片

2 文件操作的模式

技術分享圖片

3 文件的其他屬性

1 文件的常用操作

A seek([文件偏移量][文件指針位置])
文件指針的返回
為0表示文件的起始,為1 表示當前位置,為2表示末尾位置。
通過指定文件的指針可以重復讀取文件的第一行內容,
技術分享圖片
偏移量的大小表現為文件的字節數,當為正時,表示向右讀取,當為負時,表示向左讀取,當為0時,表示不偏移
技術分享圖片
B tell()顯示指針目前所處位置
技術分享圖片
C close()表示關閉當前文件
技術分享圖片
D closed 檢查當前文件是否關閉,若為True ,則表示已關閉,若為False,則表示未關閉
技術分享圖片
E name 查看文件名稱

技術分享圖片
F mode 查看當前文件的打開模式
技術分享圖片
G flush 將當前文件的內容刷新到磁盤上,其目的是為了防止斷電而保存。
技術分享圖片
H next() 用於讀取文件內容,每次讀取一行,其指針位置不發生變化
技術分享圖片

2 文件的讀取

A readline()每次讀取一行文件內容
技術分享圖片
B readlines() 每次讀取文件的所有內容
技術分享圖片
C read () 指定讀取文件的字節數,默認是全部讀取

3 文件的寫入

A write()其可以寫入字符串,
技術分享圖片
B writelins()用於傳入多個參數
技術分享圖片
技術分享圖片

二 OS 模塊

作用:用於將python與文件系統更加緊密連接的一種模塊

1 常用os模塊方法

1 目錄相關目錄相關

os.Chdir() 改變目錄/通過文件描述改變工作目錄

os.chroot() 設定當前進程的根目錄
os.listdir() 列出指定目錄下的所有文件名
os.Mkdir()創建指定目錄,默認為一級
os.makedirs(‘x/y/z‘)
os.getcwd()獲取當前目錄
os.Rmdir()刪除目錄
os.Removedirs() 刪除多級目錄
os.removedirs(‘/mnt/aaa/bbb/ccc‘) 必須制定所有的目錄才可以刪除

2 文件相關

os.mkfifo() 創建先進先出管道(命名
os.mknod() :創建設備文件
os.Remove() 刪除文件
os.Unlink( ) 刪除鏈接
os.Rename() 文件重命名
os.rename(‘passwd‘,‘aaa‘)
os.Stat() 返回文件狀態信息
os.Symlink() 創建文件鏈接,符號鏈接
In [33]: os.symlink(‘text2.txt‘,‘text2.syslink‘)
text2.syslink
os.utime() 更新文件的事件戳 updatetime
os.tmpfile() 創建並打開一個新的臨時文件,打開模式是(w+b)

3 訪問權限相關

os.access() 檢驗權限模式
In [42]: os.access(‘/tmp/text2.txt‘,0) UID 管理員的訪問權限
os.Out[42]: True
In [43]: os.access(‘/tmp/text2.txt‘,100) 普通用戶的訪問權限
Out[43]: False
os.Chmod() 修改權限
In [44]: os.chmod(‘text2.txt‘,0640) os.chmod(‘aaa‘,0777)為四位
os.Chwon 修改屬主 ,屬組
In [47]: os.chown(‘text2.txt‘,1000,1000)
[root@www tmp]# id admin
uid=1000(admin) gid=1000(admin) 組=1000(admin)
[root@www tmp]# ll text2.txt
-rw-r-----. 1 admin admin 2525 11月 19 20:35 text2.txt
os.Umask() 設置默認權限模式

4 文件描述符相關

os.Open():打開一個文件,底層操作系統的open
os.Read() 較低io的讀取操作
os.Write() 較低IO的寫操作

5 設備文件相關

os.Mkdev() 根據指定的主設備號,次設備號創建文件

In [48]: help(os.makedev)
Help on built-in function makedev in module posix:

makedev(...)
makedev(major, minor) -> device number
Composes a raw device number from the major and minor device numbers.
(END)
os.Major() 從指定的設備獲取主設備號
os.Minor() 從指定的設備獲取次設備號

2 os.path模塊

1 文件路徑相關

In [55]: import os.path
A.os.path.Basename():路徑基名
In [58]: file1=os.path.basename(‘/etc/sysconfig/netw‘)
/etc/sysconfig/network /etc/sysconfig/network-scripts/

B.os.path.irname() 路徑目錄名

C.os.path.join() 將路徑基名和目錄名整合成一個名字
In [60]: os.path.join(dir1,file1)
Out[60]: ‘/etc/sysconfig/network-scripts/‘
In [63]: for filename in os.listdir(‘/tmp‘):
....: print os.path.join(‘/tmp‘,filename)

C. os.path.splist()分割文件名和文件,返回dir和basename()元組
In [64]: os.path.split(‘/etc/sysconfig/‘)
Out[64]: (‘/etc/sysconfig‘, ‘‘)

D os.path.Splitext() 返回(filename,extension) 元組
6]: os.path.splitext(‘/tmp/‘)
Out[86]: (‘/tmp/‘, ‘‘)

2 文件信息:

A os.path.getatime() 返回文件最近一次的訪問記錄
B os.path.Getctime()
C os.path.Getmtime()
D os.path.Getsize() 返回文件的大小

3 判斷查詢類的操作

A os.path.Exists() 判斷指定文件是否存在,檔不存在時,以只讀方式打開文件是錯誤的。
B os.path.Isabs() 判斷指定的路徑是否是絕對路徑
C os.path.isdir() 判斷指定路徑是否為目錄
D os.path.Isfiel() 判斷指定文件是否為文件
E os.path.Islink() 判斷時否為符號鏈接
F os.patj.Ismount() 是否為掛載點
G os.path.Sanefiek() 兩個路徑是否執行了同一個文件

三 面向對象的編程

1 編程的分類:

1 面向過程的編程
以指令為核心:圍繞“正在發生什麽”進行編寫
面向過程:程序= 算法+ 數據結構
面向過程編程:程序具有一系列線性步驟,主體思想是代碼作用於數據,以指令為核心,核心是設計算法,
2 面向函數的編程
3 面向對象的編程
面向對象編程--object oriented programming ,簡稱OOP,把對象作為程序的基本單元,一個對象包含了數據和操作數據的函數
面向過程把函數繼續切分稱為子函數,來降低系統的復雜度。
面向對象編程(OOP)
程序 = 指令 + 數據/算法 + 數據結構
以數據為核心: 圍繞“將影響誰”進行編寫
面向對象編程(OOP):圍繞數據以及為數據嚴格定義的接口來組織程序,用數據控制對代碼的訪問,面向數據,以及能夠對這些數據采取的操作進行,代碼執行過成,不能跳過數據
面向對象編程的核心概念:
所有編程語言的最終目的都是提供一種抽象方法
在機器模型(“解空間”或“方案空間”)與實際解決問題的問題模型(“問題空間”)之間,程序員必須建立一種聯系
將問題空間中的元素以及他們在解空間中的標識物抽象為對象,並允許通過問題來描述問題而不是通過方案來描述問題
可以把實例(某個類的實例)想象成一種新型變量,他保存這數據,但可以對自身數據執行操作,實例可以對自身數據做操作

2 類和實例

1 類:

定義了被多個同一類型對象共享的結構和行為(數據和代碼)
類是抽象的,實例是具體的,類是(概念,抽象的概念模型),類本身是不能被操作的,須有實例化的對象才能操作
類的數據和代碼,及類的成員
類內部有兩個核心成員:代碼和數據,都叫類成員
數據:成員變量或實例變量
成員方法: 簡稱為方法,是操作數據的代碼,用於定義如何使用成員變量,因此一個類的行為和接口是通過方法來定義的
類:將同一種具體的物事的共同特性抽想出來的表現
狀態和方法組成(轉換這些狀態的操作組成)類
狀態:數據
方法:操作

2 實例:

實例是類的具體表現形式,類存在的目的就是為了實例化。類是抽象的,實例是具體的

3 操作

1 類的定義

calss 類名(父類):
類的內容
類後面有括號的稱為新式類,沒有括號稱為經典類。
括號裏面的內容是父類的名稱,程序中,所有父類都是object
技術分享圖片
類的查看:
技術分享圖片

2 類的數據屬性

技術分享圖片
當類的實例化後,類的屬性是不變的
技術分享圖片
類的數據屬性是可變的,當在實例處修改類的數據屬性時,其類本身的數據屬性不變。
技術分享圖片
當類的數據屬性發生改變時,原本已經改變的實例的數據屬性不會再次改變,而新創建的實例的數據屬性會發生改變
技術分享圖片

3 類的方法===函數

在類中定義的函數教方法,類的方法中,要求第一個形參必須是self,而self實際上是類實例化後的對象本身
類方法的定義
技術分享圖片
類方法的調用
技術分享圖片

4面向對象的三大特性

1 封裝

封裝實際上是把數據封裝到摸個地方,以後再去調用在某處的內容或者數據
調用封裝數據的方式
通過對象直接調用
其中init表示的是一個構造器,當類的實例化過程時會調用其方法,由於其是必選參數,因此在傳值時必須與對應的個數相同,當然可以實例化多個對象
技術分享圖片
技術分享圖片
通過self在類內部對類中的數據進行調用
技術分享圖片
類的實例化
技術分享圖片
技術分享圖片

2 繼承

1 父類和子類

基類和派生類
其中父類也叫基類
子類也叫派生類
父類
技術分享圖片
子類,其中沒有定義類的屬性和方法,只是繼承了Class1 的屬性
技術分享圖片
子類的實例化和結果,其完全繼承和父類的屬性和方法:
技術分享圖片

當子類中有自己的構造函數時,以子類中的構造函數為準
技術分享圖片
技術分享圖片

2 重寫父類的構造函數

1 通過 父類名.init(self,父類參數) 進行重寫構造函數
技術分享圖片
2 通過super(自己類名稱,self).init(形參)
優點: 不需要明確告訴父類的名稱,如果父類改變,只需修改class 語句後面的繼承關系即可,不用修改父類名稱
技術分享圖片
實例化調用
技術分享圖片

多重繼承
對於新式類,是廣度優先
對於經典類,是深度優先
技術分享圖片
對於新式類,當調用D實例時,其結果是執行D的輸出,當D中為pass 占位,其繼承了B的輸出,當B中的結果為pass 時,其會繼承C中的輸出,

對於經典類,當調用D實例時,其結果是執行D的輸出,當D中為pass 占位,其繼承了B的輸出,當B中的結果為pass 時,其會繼承A中的輸出,因為B繼承了A,因為其是深度優先。

3 多態:

當父類和子類有相同的方法時,調用優先執行子類的方法:
技術分享圖片
技術分享圖片

4 新式類和經典類

python2.x 裏面支持經典類和新式類
python3.x 裏面僅支持新式類
經典類,其可以不寫父類。
技術分享圖片
新式類,其如果沒有繼承的父類則直接寫object,必須寫父類,如果有父類,則直接寫父類
技術分享圖片
只有新式類支持mro() 方法
技術分享圖片

5 類的特殊屬性

1 class.name 類的名稱顯示
技術分享圖片
2 class.doc 類的幫助文檔

3 class.base 類的父類/基類
技術分享圖片
4 class.module 類的模塊,當不是導入的模塊的類時,其執行結果為main,當為模塊導入時,其執行結果為模塊名
技術分享圖片

6 類的私有屬性

通過在類的構造時使用self.__x=x 來 獲取類的私有屬性。

1 簡介

默認的類的私有屬性不能訪問:
技術分享圖片
通過將其私有屬性包裝成方法進行使用,其是可以訪問的。
技術分享圖片
通過此裝飾器@property: 定義一個類方法為私有屬性的名稱;讓用戶可以直接訪問, 但不能任意修改;
技術分享圖片
通過其裝飾器的方法進行重新定義一個接受隱藏屬性的範圍來進行修改其值。

@屬性名.seeter: 給屬性賦值時先做判斷; 當屬性名=value會自動調用該函數

通過deleter 方法可以使得當del 屬性名, 會自動調用該函數並執行高函數下面的操作

技術分享圖片

@property應用:
用於分頁顯示,此處傳入兩個值,一個值是第幾頁,另一個是每頁的數量,通過@property 可以進行對列表的操作。

技術分享圖片

2 私有屬性的繼承

默認的,私有屬性不能直接調用,需要偽裝成方法方可調用。
技術分享圖片
在類中,以雙下劃綫開始的方法稱為私有方法:私有方法不能繼承。
技術分享圖片

7 魔術方法format

1 通過位置符號:

其中format後面的第一個數字位置為0,第二個數字位置為1,
技術分享圖片
技術分享圖片
其可以使用folate類型進行格式化結果
技術分享圖片
技術分享圖片

2 通過匹配字典的鍵來得到結果

技術分享圖片

3 格式化元祖的具體項

技術分享圖片

4 在類中的應用:

技術分享圖片
擴展:
技術分享圖片

8 類方法擴展

叠代:
判斷一個對象是否可叠代,看類是否有iter方法
技術分享圖片
其他的方法
getitem(self,item):
用於查看某個key對應的vlaues
setitem(self,key.values) 用於當導入某個key,values時修改當前的values為指定傳入的vlaues
delitem(self,key)用於通過指定鍵,來刪除值的過程.
getslice(self,i,j) 用以查看切片的結果,傳入的分別是切片的起始和結束
setslice(self,i,j,squence): 用以將切片的值修改,傳入切片的起始,結束和要修改成為的字段
delslice(self,i,j): 用以將接片的結果刪除
技術分享圖片

python之文件操作、OS模塊、面向對象