目錄
前言
一、操作文件路徑
1.獲取當前路徑
2.創建文件夾
(1)mkdir()函數
(2)makedirs() 函數
3.拼接路徑
4.跳轉路徑
5.判斷相對路徑和絕對路徑
6.獲取文件路徑和文件名
?二、操作文件和文件夾
1.查詢文件大小
2.刪除文件和文件夾
3.重命名文件或文件夾
4.復制文件
5.獲取文件夾中的全部文件名
6.判斷文件和文件夾
前言
Python標準庫提供了os庫來管理操作系統相關功能,無須下載、安裝,os庫包含豐富的操作文件的方法,可以通過import os導入庫之后使用dir(os)查詢獲取。
一、操作文件路徑
1.獲取當前路徑
os庫中的getcwd()函數可用于獲取當前代碼所在文件夾的絕對路徑(不包含代碼文件名)。
示例代碼:
import os
print(os.getcwd())
代碼執行結果:
E:\書代碼\第9章
2.創建文件夾
os庫中有兩種用于創建文件夾的函數,分別為mkdir()函數和makedirs()函數。
(1)mkdir()函數
在os庫中使用mkdir(路徑)函數可以實現在路徑中創建一個新的文件夾。 示例代碼:
import os 02 os.mkdir(r'E:\書代碼\第9章\數據1')
注意,必須保證“E:\書代碼\第9章”這個路徑是正確的,否則會無法創建新文件夾。例如將以上代碼第2行中的路徑修改為“E:\書代碼1”,由于并不存在“書代碼1”這個文件夾,因此無法在“書代碼1”文件夾中創建新的文件夾,執行代碼后將輸出報錯信息。
(2)makedirs() 函數
在os庫中makedirs(路徑)函數是根據參數來遞歸創建文件夾,遞歸表示根據路徑創建包含的全部文件夾。 示例代碼:
import os
os.makedirs(r'E:\書代碼1\數據1\內容b')
第2行代碼使用makedirs()函數創建了文件夾,由于E盤下并沒有文件夾“書代碼1”,因此代碼執行之后會在E盤中連續創建3個文件夾,其中“書代碼1”文件夾包含“數據1”文件夾,“數據1”文件夾包含“內容b”文件夾。
因此mkdir()函數和makedirs()函數的區別在于是否可以遞歸創建文件夾。
示例代碼(批量創建200個文件夾):
import os
for i in range(1, 201):file_name = '文件夾' + str(i)file_path = os.getcwd() + '\數據1\' + file_nameos.mkdir(file_path)
3.拼接路徑
使用os.path.join()方法可以實現將參數拼接為目錄路徑,從而方便且快速地獲取文件地址。
示例代碼:
import os
dir_new = os.path.join(os.getcwd(), '數據2', '內容c')
print(dir_new, type(dir_new))
第2行代碼中的os.getcwd()函數用于獲取當前代碼所在文件夾的路徑,os.path.join()方法將當前路徑、'數據2'和'內容c'以路徑的形式進行拼接(無須考慮構成路徑的轉義字符等問題)。
代碼執行結果:
E:\書代碼\第9章\數據2\內容c <class 'str'>
4.跳轉路徑
如果需要在程序中實現從當前代碼所在文件夾路徑跳轉到其他路徑,可以使用os庫中的chdir(路徑)函數,但要注意路徑必須是已經存在的,否則運行代碼后會出現報錯。
示例代碼:
import os
print(os.getcwd())
os.chdir('E:\書代碼\第9章\數據2')
print(os.getcwd())
第3行代碼使用os.chdir()將當前工作路徑修改為“E:\書代碼\第9章\數據1”,即改變了當前工作路徑的唯一性。修改當前工作路徑是為了便于后期可以使用相對路徑操作新路徑下的文件。
代碼執行結果:
E:\書代碼\第9章
E:\書代碼\第9章\數據1
5.判斷相對路徑和絕對路徑
使用os.path.isabs(path)方法可以判斷當前路徑是相對路徑還是絕對路徑。
示例代碼:
import os
a = os.path.isabs('數據2\內容c')
b = os.path.isabs('E:\書代碼')
print(a, b)
第2行和第3行代碼分別判斷路徑是絕對路徑還是相對路徑,如果是絕對路徑將返回True,如果是相對路徑將返回False。
代碼執行結果:
False True
6.獲取文件路徑和文件名
os庫的path模塊下的basename(path)方法可用于獲取路徑中的文件名,dirname(路徑)方法可用于獲取路徑中的文件夾路徑,split(路徑)方法可用于將獲取的文件夾路徑和文件名以元組的形式返回。
示例代碼:
import os
path = r'E:\書代碼\數據2\內容c\Python程序代碼1.txt'
file_name = os.path.basename(path)
dir_name = os.path.dirname(path)
file_dir_name = os.path.split(path)
print(file_name, '\n', dir_name, '\n', file_dir_name)
第3行代碼獲取路徑中的文件名,第4行代碼獲取文件夾路徑,第5行代碼獲取文件夾路徑和文件名并以元組形式返回。
代碼執行結果:
Python程序代碼1.txt
E:\書代碼\數據2\內容c
('E:\書代碼\數據2\內容c', 'Python程序代碼1.txt')
?二、操作文件和文件夾
1.查詢文件大小
使用os庫的path模塊下的getsize(path)豐富可以獲取路徑中的文件所占用內存的大小,單位為字節。
示例代碼:
import os
path = r'E:\書代碼\數據2\內容c\Python程序代碼1.txt'
print(os.path.getsize(path))
該代碼用于獲取Python程序代碼1.txt文件的大小,執行代碼后的輸出結果為962,單位為字節(1024個字節為1KB)。
2.刪除文件和文件夾
os庫中的remove(path)方法可用于刪除path中的文件。
示例代碼:
import os
os.remove(r'E:\書代碼1\數據1\內容b\dwed.txt')
如果在文件夾“E:\書代碼1\數據1\內容b”中存在一個dwed.txt文件,執行第2行代碼后,該文件將會被刪除。
os庫中的rmdir(path)方法可用于刪除path中的最后一層文件夾,不能遞歸刪除整個path的全部文件夾。
示例代碼:
import os
os.rmdir('數據3\內層1')
執行該代碼后將會刪除“內層1”文件夾。
3.重命名文件或文件夾
使用os庫中的rename()和renames()函數即可實現對文件或文件夾進行重命名。其使用形式如下:
os.rename(src, dst)
os.renames(src, dst)
功能: rename()函數修改指定文件夾或文件的名稱,renames()函數遞歸修改文件夾或文件的名稱。
參數src: 表示要修改的文件夾路徑或文件路徑。
參數dst: 表示修改后的文件夾路徑或文件路徑。
示例代碼(將圖9-1所示的所有文件夾名序號增大200):
import os
for i in range(1, 201):old = 'E:/書代碼/第9章/數據1/文件夾' + str(i)new = 'E:/書代碼/第9章/數據1/文件夾' + str(i + 200)os.rename(old, new) # 對文件或文件夾進行重命名
os.renames('E:/書代碼/第9章/數據1/文件夾201', 'E:/書代碼/第9章/數據2/文件夾201')
第2~5行代碼使用for循環200次,分別獲取要修改的路徑old和修改后的路徑new,并使用rename()函數修改文件夾名稱。 第6行代碼使用renames()函數將前面第2~5行代碼執行后得到的文件夾“E:/書代碼/第9章/數據1/文件夾201”遞歸修改為“E:/書代碼/第9章/數據2/文件夾201”,從而間接實現了文件的移動功能。
4.復制文件
os庫中的os.link()函數可用于創建硬鏈接以實現復制文件。其使用形式如下:
os.link(src, dst)
參數src: 表示要修改的文件夾路徑或文件路徑。
參數dst: 表示修改后的文件夾路徑或文件路徑。
示例代碼(將文件復制到另一個路徑中):
import os
os.link('E:/書代碼/報告合集.pdf', 'E:/書代碼/數據1/報告合集.pdf')
執行代碼后即可將“報告合集.pdf”文件復制到“E:/書代碼/數據1”路徑中。
5.獲取文件夾中的全部文件名
使用os庫中的listdir(路徑)方法即可獲取文件夾中的全部文件名(包含文件和文件夾的名稱)。
示例代碼:
import os
print('相對路徑中有:', os.listdir('.'))
代碼執行結果:
相對路徑中有: ['數據1', '數據2', '第9章第1個程序.py', '第9章第3個程序.py', '第9章第5個程序.py']
代碼結果是以列表的形式輸出的路徑中的全部內容,其中數據1、數據2和數據3是文件夾,其余內容均為文件。
在辦公領域中,獲取文件夾中的全部文件是較為常見的操作,當需要對一系列的文件進行操作時,可以先將這一系列的文件存放在同一個文件夾中,然后通過os.list()方法遍歷并獲取文件,再對文件進行操作。
示例代碼(統計當前文件夾中所有文件占用空間的大小):
import os
file_total_size = 0
for file_name in os.listdir('.'):file_dir = os.path.join(os.getcwd(), file_name)file_total_size += os.path.getsize(file_dir)
print(file_total_size/1024)
第2行代碼使用file_total_size來統計所有文件占用的空間,初始時為0。
第3行代碼使用os.listdir('.')獲取文件夾內所有文件的名稱,并以列表的形式返回作為循環內容,依次賦值給變量file_name。
第4行代碼構建每個文件的完整路徑,包含路徑和文件名。
第5行代碼通過getsize()方法獲取文件的大小,并將其累加到file_total_size變量中。循環結束后輸出file_total_size/1024的值,輸出的值的單位為KB。
代碼執行結果:
45.3408203125
結果表明此文件夾一共約占45KB的內存。
6.判斷文件和文件夾
os庫中提供了以下3種用于判斷path是文件還是文件夾的方法。
第1種,os.path.exists(path)。判斷path所指的文件或文件夾是否存在,如果存在則返回True,否則返回False。
第2種,os.path.isfile(path)。判斷path是否為文件,如果是文件則返回True,否則返回False。
第3種,os.path.isdir(path)。判斷path是否為文件夾,如果是文件夾則返回True,否則返回False。
示例代碼:
import os
path = r'E:\書代碼\數據2\內容c\Python程序代碼1.txt'
print(os.path.exists(path), end='\t')
print(os.path.isfile(path), end='\t')
print(os.path.isdir(path), end='\t')
該代碼分別使用了這3種方法來判斷變量path表示的路徑。
代碼執行結果:
True True False
注意,當文件夾存在但文件夾中的文件不存在時,執行3種方法后都會返回False。