標籤:檔案系統、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)
[[email protected] tmp]# id admin
uid=1000(admin) gid=1000(admin) 組=1000(admin)
[[email protected] 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 魔術方法format1 通過位置符號:
其中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模組、物件導向