這可能是最詳細的Python檔案操作

花墨發表於2019-01-04

刪除

# ==================刪除==================
# 只能刪除檔案,若為目錄則報錯
# 若檔案正在使用,Windows下會直接報錯,Linux下會在目錄表中刪除記錄,但檔案還在
# 與os.unlink()一樣的作用
os.remove(r"C:\Users\Microsoft\Desktop\111.exe")

# 刪除目錄,目錄必須為空,否則報錯OSError
os.rmdir(r"C:\Users\Microsoft\Desktop\aaa")
# 遞迴刪除空目錄
os.removedirs(r"C:\Users\Microsoft\Desktop\1\2\3")
# 刪除整個目錄(不管此目錄下有多少目錄和檔案)
shutil.rmtree(r"C:\Users\Microsoft\Desktop\aaa")
# ======================================
複製程式碼

新建

# ==================新建==================
# 新建資料夾,若倒數第二層資料夾不存在則會報錯
os.mkdir(r"/home/python")
# 遞迴新建目錄,若資料夾存在則報錯
os.makedirs(r"C:\Users\Microsoft\Desktop\aaa\666\777")
# ======================================
複製程式碼

複製

# ==================複製==================
# 複製檔案,不能複製資料夾
shutil.copyfile(r"D:\python\py1\1.txt", r"D:\python\py2\1.txt")
# 複製檔案,與copyfile不同的是,第二個可以引數可以使用資料夾路徑
shutil.copy(r"D:\python\py1\1.txt", r"D:\python\py2")
# shutil.copy只複製檔案內容,copy2還複製了建立時間、修改時間等資訊,
shutil.copy2(r"D:\python\py1\1.txt", r"D:\python\py2")
# 複製整個資料夾,若目標目錄已存在,則會報錯
shutil.copytree(r"D:\python\py1", r"D:\python\py3\py1")
# ======================================
複製程式碼

移動

# ==================移動====================
# 移動檔案或資料夾,可使用目錄樹形式
shutil.move(r"D:\python\py1", r"D:\python\py3\py2")
# ========================================
複製程式碼

重新命名

# ==================重新命名==================
# 重新命名檔案或目錄,但不能這樣:rename("/aaa/a.txt","/bbb/a.txt"),也不能同時重新命名目錄和檔案
os.rename(r"C:\Users\Microsoft\Desktop\aaa\5",r"C:\Users\Microsoft\Desktop\bbb\6")
# 重新命名目錄或檔案
# 若同時重新命名路徑和檔案,則會新建路徑並將檔案重新命名後移動到新目錄
# 如:os.renames("/aaa/b.txt","/bbb/c.txt"),則會在aaa同級目錄新建bbb目錄,並將b.txt重新命名為c.txt後移動到bbb目錄
os.renames(r"C:\Users\Microsoft\Desktop\aaa\6",r"C:\Users\Microsoft\Desktop\aaa\123")
# =======================================
複製程式碼

路徑相關

# ==================路徑相關==================
# 獲取檔案的完整路徑
os.path.abspath(r"script.py")
# 獲取完整路徑中的檔名,以下返回script.py,等價於os.path.split(path)[1]
os.path.basename(r"/home/python/script.py")
# 獲取檔案的絕對路徑,引數也必須是全路徑,另:即使檔案不存在也會正常返回,等價於os.path.split(path)[0]
os.path.dirname(r"/home/python/script.py")
# 獲取檔案的檔名和副檔名,以下返回:('script', '.py')
os.path.splitext(r"script.py")
# 獲取指令碼執行目錄
os.getcwd()
# 獲取目錄下檔案列表,引數為空則為指令碼執行目錄,返回格式:['1.py','2.py']
os.listdir(r"/home/python")
# 判斷檔案或路徑是否存在
os.path.exists(r"/home/python")
# 判斷目標是檔案還是路徑
os.path.isdir(r"/home/python")
os.path.isfile(r"/home/python")
# =========================================
複製程式碼

遍歷目錄

兩種方式:

  1. os.walk()
  2. os.listdir() 遞迴

os.walk

os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

引數1:要遍歷的目錄

引數2:預設True為廣度遍歷,False為深度遍歷

引數3:可空,callable 物件,當 walk 異常時,會呼叫

引數4:可空,如果為 True,則會遍歷目錄下的快捷方式(linux 下是 symbolic link)實際所指的目錄(預設關閉)

import os 

list_dirs = os.walk(rootDir) 
for root, dirs, files in list_dirs:
    # root 所指的是當前正在遍歷的這個資料夾的本身的地址
    # dirs 是一個list,內容是該資料夾中所有的目錄的名字(不包括子目錄)
    # files 同樣是list , 內容是該資料夾中所有的檔案(不包括子目錄)
    print("======")
    for d in dirs:
        # 只輸出遍歷資料夾名
        print(os.path.join(root, d))
    for f in files:
        # 只輸出遍歷的檔名
        print(os.path.join(root, f))
複製程式碼

os.listdir遞迴

os.listdir(path)

引數1:目錄

返回path目錄下的資料夾名和檔名,並按字母順序排列

def Recursion(rootDir):
    for lists in os.listdir(rootDir):
        path = os.path.join(rootDir, lists)
        # 輸出檔名或資料夾名
        print(path)
        # 判斷是否為資料夾,如果是,則遞迴遍歷
        # 如果不是則為檔案,可執行具體邏輯
        if os.path.isdir(path):
            Recursion(path)
        else:
            pass
複製程式碼

我的部落格:花墨世界

公眾號:花墨世界

這可能是最詳細的Python檔案操作

相關文章