1. 程式人生 > >python獲取指定目錄下所有檔名os.walk和os.listdir

python獲取指定目錄下所有檔名os.walk和os.listdir

python獲取指定目錄下所有檔名os.walk和os.listdir

覺得有用的話,歡迎一起討論相互學習~Follow Me

os.walk

  • 返回指定路徑下所有檔案和子資料夾中所有檔案列表
  • 其中資料夾下路徑如下:
import os
def file_name_walk(file_dir):
    for root, dirs, files in os.walk(file_dir):
        print("root", root)  # 當前目錄路徑
        print("dirs", dirs)  # 當前路徑下所有子目錄
        print("files", files)  # 當前路徑下所有非目錄子檔案

file_name_walk("./")
# root ./
# dirs ['test']
# files ['200-2000(1).txt', '200-2000(2).txt', '200-2000(3).txt', 'getFileName.py']
# root ./test
# dirs []
# files ['test.txt']
  • 對於os.walk會遍歷指定目錄下的所有子資料夾和子資料夾中的所有檔案,例如此處的root資料夾中有test資料夾和'200-2000(1).txt', '200-2000(2).txt', '200-2000(3).txt', 'getFileName.py'等檔案
  • 然後遍歷子資料夾test,發現其中並沒有子資料夾,所以dirs=[],但是子資料夾test中有文字檔案test.txt.所以有['test.txt']的值

os.listdir()

  • 返回指定路徑下所有的檔案和資料夾列表,但是子目錄下檔案不遍歷。
def file_name_listdir(file_dir):
    for files in os.listdir(file_dir):  # 不僅僅是檔案,當前目錄下的資料夾也會被認為遍歷到
        print("files", files)

file_name_listdir("./")
# files 200-2000(1).txt
# files 200-2000(2).txt
# files 200-2000(3).txt
# files getFileName.py
# files test
  • 注意:使用os.listdir函式不僅是檔案,資料夾也會被遍歷到,例如test即是一個資料夾。

全域性變數儲存

  • 如果想要儲存檔名可以使用全域性變數或者區域性變數進行儲存。
  • 如果使用全域性變數,則每次呼叫函式的資訊都存在全域性列表中
Files_Global = []

def file_name_listdir_global(file_dir):
    for files in os.listdir(file_dir):
        Files_Global.append(files)

file_name_listdir_global(".")
file_name_listdir_global("./test")
# 最終的結果都會被儲存到全域性列表變數中
print("Files_Global: ", Files_Global)
# Files_Global:  ['200-2000(1).txt', '200-2000(2).txt', '200-2000(3).txt', 'getFileName.py', 'test', 'test.txt']
  • 此處使用os.listdir函式將遍歷得到的結果都儲存到全域性變數Files_Global中,則其中包含了遍歷"."當前資料夾和"./test"當前資料夾中的test資料夾中的所有資訊

區域性變數和函式返回

  • 區域性變數,只儲存本次函式呼叫得到的結果,通過返回值儲存
  • 建議使用區域性變數加返回值的方式
def file_name_listdir_local(file_dir):
    files_local = []
    for files in os.listdir(file_dir):
        files_local.append(files)
    return files_local

file_local_1 = file_name_listdir_local(".")
file_local_2 = file_name_listdir_local("./test")
print("file_local_1:", file_local_1)  # 當前目錄下檔案
print("file_local_2", file_local_2)  # 子目錄test下檔案
# file_local_1: ['200-2000(1).txt', '200-2000(2).txt', '200-2000(3).txt', 'getFileName.py', 'test']
# file_local_2 ['test.txt']

通過os.path.splitext指定檔案型別

  • 選取特定檔案型別
  • 選取檔名中所有txt字尾名的文字檔案
def file_name(file_dir):
    File_Name=[]
    for files in os.listdir(file_dir):
        if os.path.splitext(files)[1] == '.txt':
            File_Name.append(files)
    return File_Name
txt_file_name=file_name(".")
print("txt_file_name",txt_file_name)

# txt_file_name ['200-2000(1).txt', '200-2000(2).txt', '200-2000(3).txt']