python獲取指定目錄下所有文件名os.walk和os.listdir
覺得有用的話,歡迎一起討論相互學習~




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']