1. 程式人生 > >Python基礎總結之第九天開始【python之OS模組對目錄的操作、以及操作檔案】(新手可相互督促)

Python基礎總結之第九天開始【python之OS模組對目錄的操作、以及操作檔案】(新手可相互督促)

年薪20萬的夢想。。。
        python對檔案、目錄能做什麼?或者說我們需要python替我們做什麼?最經常的操作就是對檔案的:
開啟、關閉、讀取、寫入、修改、儲存等等對目錄的操作,無非就是:建立目錄、刪除目錄、更改目錄名字等等。
我們先認識一下OS模組,os模組以及子模組path中包含了獲取系統資訊、以及對系統進行設定的函式。提供了Python
系統和作業系統進行互動的一個介面。
我們怎麼使用os模組中的函式呢?看下程式碼:

1 import os     #匯入os模組

我們輸入這樣一行程式碼,就代表將OS模組匯入在,我們的python檔案中,這樣我們就可以,使用os模組下面的各個函數了!是不是很簡單。

接下來我們認識第一個函式:

getcwd()   該函式用於獲取當前工作目錄。

1 import os     #匯入os模組
2 print('演示獲取當前目錄:',os.getcwd())    #使用格式:模組.函式()   記住中間有個點os.getcwd()

我們看到了當前工作目錄,那麼我們用第二個函式,可以看到當前目錄下包含了那些檔案或目錄。

listdir()    用於看到當前目錄下包含了那些檔案或目錄,並存放在一個列表中。

1 import os     #匯入os模組
2 
3 print(os.listdir(os.getcwd())) #使用格式:os.listdir() 用於列出當前目錄包含的檔名和目錄名,存放在列表中。

 

接下來我們看到自己想要找到目錄後,我們切換目錄。

1 os.chdir('C:/Users/92938/PycharmProjects')    #改變目錄,指定一個目錄的絕對路徑。   
2 print('演示獲取當前目錄:',os.getcwd())          #顯示改變目錄後的路徑位置
3 print(os.listdir(os.getcwd()))                #顯示改變目錄後的目錄中包含什麼檔案或目錄

  

 

 接下來我們再看看怎麼建立目錄:

mkdir()                建立目錄,如果在建立目錄的時候,建立的目錄名與現有的目錄名重名,會報異常。

makedirs()           建立目錄,與前者區別在於,它可以建立多層級的目錄。

我們先建立下目錄看下程式碼的實現:

 

1 import os     #匯入os模組
2 os.chdir(r'C:\Program Files\tools')    #改變目錄,指定一個目錄的絕對路徑。   前面的r是轉義字元,前面的總結有講過它的使用方法。
3 print('演示獲取當前目錄:',os.getcwd())    #顯示改變目錄後的路徑位置
4 print(os.listdir(os.getcwd()))             #顯示改變目錄後的目錄中包含什麼檔案或目錄
5 
6 os.mkdir('tt')    #建立一個資料夾
7 print(os.listdir(os.getcwd()))             #檢視建立的tt資料夾

mkdir()  建立的資料夾是當前目錄的資料夾,不能同時建立多層。

接下來看第二種建立方式:多層建立目錄:

1 import os     #匯入os模組
2 os.chdir(r'C:\Program Files\tools')        #改變目錄,指定一個目錄的絕對路徑。  前面的r是轉義字元,前面的總結有講過它的使用方法。
3 print('演示獲取當前目錄:',os.getcwd())    #顯示改變目錄後的路徑位置
4 print(os.listdir(os.getcwd()))             #顯示改變目錄後的目錄中包含什麼檔案或目錄
5 
6 os.makedirs('aa/bb/cc')
7 print(os.listdir(os.getcwd()))             #檢視建立的aa資料夾
8 os.chdir(r'C:\Program Files\tools\aa')     #檢視aa資料夾中是不是有bb資料夾

建立了這麼多垃圾檔案,我們看看怎麼刪除資料夾吧:

rmdir()  刪除指定的目錄(資料夾),如果目錄裡面有其他目錄或檔案不是空目錄,會報錯。

removedirs()  刪除指定的目錄,可以指定多級  aa/bb/cc   這樣會同時刪除  aa/bb/cc三個目錄。

話不多說看程式碼:

1 import os                #匯入os模組
2 os.chdir(r'C:\Program Files\tools')        #改變目錄,指定一個目錄的絕對路徑。  前面的r是轉義字元,前面的總結有講過它的使用方法。
3 print('演示獲取當前目錄:',os.getcwd())       #顯示改變目錄後的路徑位置
4 print(os.listdir(os.getcwd()))             #顯示改變目錄後的目錄中包含什麼檔案或目錄
5 
6 os.rmdir('tt')
7 print(os.listdir(os.getcwd()))             #檢視當前目錄下的tt資料夾是不是被刪除

 rmdir()  不能進行多層級的同時刪除目錄,如果目錄不為空,刪除會報錯。

再看下多層級同時刪除,切記,目錄裡面需要為空,沒有任何檔案哦,不然會報錯的~~~

1 import os
2 os.chdir(r'C:\Program Files\tools')                        #切換到指定的檔案目錄
3 print('檢視是不是我們切換的目錄地址:',os.getcwd())        #檢視是不是我們切換的目錄
4 print(os.listdir(os.getcwd()))                             #這倆函式組合使用,檢視當期目錄下面有哪些目錄或檔案
5 
6 os.removedirs(r'aa\bb\cc')                            #多層級刪除目錄,aa\bb\cc三個空目錄同時刪除
7 print(os.listdir(os.getcwd()))                     #檢視刪除後還有aa檔案目錄嗎?

最後我們看下怎給當前目錄更改名字?

目錄的名字更改:

rename()    括號中需要兩個引數:  舊檔名,新檔名     記住中間是英文逗號。

renames()   同樣的,這個函式可以同時修改多層級目錄的名字。比如:     aa\bb\cc   改為  dd\ee\ff

看程式碼吧:

1 import os                                   #匯入os模組
2 os.chdir(r'C:\Program Files\tools')         #切換到指定的路徑目錄
3 print(os.listdir(os.getcwd()))              #檢視當前切換的目錄下面有哪些目錄
4 os.mkdir('tt')
5 print(os.listdir(os.getcwd()))              #檢視當前目錄有沒有建立成功tt目錄
6 os.rename('tt','gg')
7 print(os.listdir(os.getcwd()))              #檢視當前tt目錄是不是變成了gg目錄

接下來看多層級同時更改目錄名稱

1 import os                                   #匯入os模組
2 os.chdir(r'C:\Program Files\tools')         #切換到指定的路徑目錄
3 print(os.listdir(os.getcwd()))              #檢視當前切換的目錄下面有哪些目錄
4 os.makedirs(r'aa\bb\cc')
5 print(os.listdir(os.getcwd()))              #檢視當前目錄有沒有建立成功aa目錄
6 os.renames(r'aa\bb\cc',r'dd\ee\ff')
7 print(os.listdir(os.getcwd()))              #檢視當前aa目錄是不是變成了dd目錄

目錄的基本操作就是這些,大家要請於練習,如果有問題可以留言哦~

 

接下來我們看下對檔案的操作有哪些常用的函式吧!

檔案對於python來說是一個檔案物件,不管是對檔案有任何操作,我都需要通過open()函式來獲取該檔案物件並賦值給一個變數。

open(file_name,access_mode='r')       開啟檔案的函式中有兩個引數,第一個引數是file_name:檔名,可以是絕對路徑,也可以是相對路徑。

第二個引數是access_mode:訪問檔案的方式:訪問檔案的方式有這麼幾種:r、w、a、r+、w+  接下來我們依次演示:

指標:代表檔案中的游標目前所在位置。如圖:

 

開始看程式碼:

open(file_name,'r')        以讀的方式開啟檔案,檔案指標會在檔案的開頭

1 file_a =open(r'C:\Program Files\tools\file_a.txt','r')#在絕對路徑開啟file_a文字檔案,記得加檔案字尾.txt

open(file_name,'w')        以寫的方式開啟檔案,如果檔案存在,會被清空。如果不存在,建立一個檔案

1 file_a =open(r'C:\Program Files\tools\file_a.txt','w')#在絕對路徑開啟file_a文字檔案,記得加檔案字尾.txt

open(file_name,'a')        為了在檔案的末尾追加內容開啟檔案,如果檔案存在,檔案的指標在檔案的末尾,如果不存在就建立一個檔案

1 file_a =open(r'C:\Program Files\tools\file_a.txt','a')

 

現在開始正式的讀取檔案:

read()   這個方法有一個引數,括號中可以輸入數字,表示讀取多少個位元組的內容。如果不填寫,預設讀取所有檔案內容

以下程式碼將以次檔案截圖為依據,我們可以看到檔案是txt文字,裡面有三行資料,第一行是:123  第二行是:abc 第三行是:789

1 file_a =open(r'C:\Program Files\tools\file_a.txt','r')  #首先我們以支援讀寫的模式開啟檔案,然後將檔案傳遞給變數file_a
2 
3 file_read = file_a.read(2)   #開始讀取檔案的內容,讀取前兩個字元 12
4 print(file_read)             #將讀取的內容列印

我們繼續讀取後面的內容,每次讀取兩個位元組:

1 file_a =open(r'C:\Program Files\tools\file_a.txt','r')  #首先我們以支援讀寫的模式開啟檔案,然後將檔案傳遞給變數file_a
2 
3 file_read = file_a.read(2)   #開始讀取檔案的內容,讀取前兩個字元 12
4 print(file_read)             #將讀取的內容列印
5 
6 file_read2 = file_a.read(2)   #再次讀取2個位元組的內容
7 print(file_read2)             #將讀取的內容列印,我們發現第一行只有3這麼一個位元組了,所以只有3

 

按位元組多少,去讀取文字中的內容,這個方法你一定明白了吧!

那麼我們用預設的方式,不新增任何引數,直接讀取所有的內容:

1 file_a =open(r'C:\Program Files\tools\file_a.txt','r')  #首先我們以支援讀寫的模式開啟檔案,然後將檔案傳遞給變數file_a
2 
3 file_read = file_a.read()   #開始讀取檔案的內容,預設不填寫引數,預設讀取所有的內容
4 print(file_read)             #將讀取的內容列印

 

close()     關閉檔案

1 file_a.close()              #關閉檔案,多次按位元組開啟檔案後,檔案中的指標游標位置會改動,所以處理檔案後記得關閉哦
1 file_a =open(r'C:\Program Files\tools\file_a.txt','r')  #首先我們以支援讀寫的模式開啟檔案,然後將檔案傳遞給變數file_a
2 
3 file_read = file_a.read()   #開始讀取檔案的內容,預設不填寫引數,預設讀取所有的內容
4 print(file_read)            #將讀取的內容列印
5 
6 file_a.close()              #關閉檔案,多次按位元組開啟檔案後,檔案中的指標游標位置會改動,所以處理檔案後記得關閉哦

 

有時候,如果我們不知道第一行有多少個位元組,但是我們需要的內容就是在第一行,那麼我們就要用到它來獲取第一行的內容:

readline()   預設獲取第一行內容,多次呼叫,檔案指標游標會讀取下一行內容。

1 file_a =open(r'C:\Program Files\tools\file_a.txt','r')  #首先我們以支援讀寫的模式開啟檔案,然後將檔案傳遞給變數file_a
2 
3 file_read = file_a.readline()   #獲取第一行內容
4 print(file_read)            #將讀取的內容列印
5 
6 file_read = file_a.readline()   #第二次用,所以獲取的是第二行的內容
7 print(file_read)            #將讀取的內容列印
8 
9 file_a.close()              #關閉檔案,多次按位元組開啟檔案後,檔案中的指標游標位置會改動,所以處理檔案後記得關閉哦

接下來我們看看怎麼獲取一行內容,並且把內容存在一個list列表中,方便我們操作:

readlines()      它可以獲取一行內容,並且把內容存在一個list列表中

1 file_a =open(r'C:\Program Files\tools\file_a.txt','r')  #首先我們以支援讀寫的模式開啟檔案,然後將檔案傳遞給變數file_a
2 
3 file_read = file_a.readlines()   #獲取第一行內容,並把內容放在列表中
4 print(file_read)                 #將讀取的內容列印,看第一行內容是不是在列表中
5 print(file_read[1])              #既然是列表,肯定支援元素下標獲取我們要得內容
6 file_a.close()   #關閉檔案

 

最後我們看下檔案內容的寫入,我們知道,剛才的檔案中內容是:有三行資料,第一行是:123  第二行是:abc 第三行是:789

現在我們在裡面加點料~~~

檔案物件內建的有write()  可以向當前檔案指標的位置,寫入字串到檔案中。

檔案物件的內建方法tell()  可以獲取到當前檔案指標的位置

檔案物件的內建方法seek() 可以在檔案中前後移動指標的位置,它有兩個引數,第一個引數是:offset,表示移動多少位元組的位置。第二個引數是:whence,表示從什麼地方開始移動。

格式:file_a.seek(offset,whence)

獲取當前檔案指標的位置:

1 file_a =open(r'C:\Program Files\tools\file_a.txt','w+')  #首先我們以支援讀寫的模式開啟檔案,然後將檔案傳遞給變數file_a
2 
3 print(file_a.tell())  #獲取當前指標的位置

 

 我們使用w+的方式寫入,w+ :如果檔案存在,會在檔案中寫入內容,刪除原來的內容。

1 file_a =open(r'C:\Program Files\tools\file_a.txt','w+')  #首先我們以支援讀寫的模式開啟檔案,然後將檔案傳遞給變數file_a
2 
3 print(file_a.tell())  #獲取當前指標的位置
4 
5 file_a.write(r'www.baidu.com')    #我們在第一行寫入內容
6 print(file_a.tell()) #獲取當前指標的位置

 


 先到這裡了~~基本的操作都是一樣的,大家可以嘗試寫一下。不懂的記得評論,會回覆大家的

----------------------------------------一個來自堅持筆記的新手