一、背景
實現某個目錄下所有文件(包含子目錄中的文件)的列出,可以使用 Python
實現。
二、實現
- 方法一
# 修改工作目錄
import os
os.chdir(r'C:\Users\Hider\Desktop')
# 定義函數
def list_all_files(rootdir):
import os
_files = []
# 列出文件夾下所有的目錄與文件
list = os.listdir(rootdir)
for i in range(0, len(list)):
# 構造路徑
path = os.path.join(rootdir, list[i])
# 判斷路徑是否為文件目錄或者文件
# 如果是目錄則繼續遞歸
if os.path.isdir(path):
_files.extend(list_all_files(path))
if os.path.isfile(path):
_files.append(path)
return _files
# 執行
dir = r'C:\Users\Hider\Desktop\python' # 目錄地址
list_all_files(dir)
# 結果
```
['C:\\Users\\Hider\\Desktop\\python\\dataminingguide.pdf',
'C:\\Users\\Hider\\Desktop\\python\\kaggle-titanic-learning.py',
'C:\\Users\\Hider\\Desktop\\python\\nba.txt',
'C:\\Users\\Hider\\Desktop\\python\\python-pandas-learning.py',
'C:\\Users\\Hider\\Desktop\\python\\python_algorithm_learning.py',
'C:\\Users\\Hider\\Desktop\\python\\Python編程:從入門到實踐.pdf',
'C:\\Users\\Hider\\Desktop\\python\\《Python數據挖掘入門與實踐》.pdf',
'C:\\Users\\Hider\\Desktop\\python\\大數定理.py',
'C:\\Users\\Hider\\Desktop\\python\\技術學習.sql',
'C:\\Users\\Hider\\Desktop\\python\\泰坦尼克\\gender_submission.csv',
'C:\\Users\\Hider\\Desktop\\python\\泰坦尼克\\test.csv',
'C:\\Users\\Hider\\Desktop\\python\\泰坦尼克\\titanic.zip',
'C:\\Users\\Hider\\Desktop\\python\\鮑魚\\abalone.csv',
'C:\\Users\\Hider\\Desktop\\python\\鮑魚\\abalone.data',
'C:\\Users\\Hider\\Desktop\\python\\鮑魚\\abalone.names',
'C:\\Users\\Hider\\Desktop\\python\\鮑魚\\abalone.txt',
'C:\\Users\\Hider\\Desktop\\python\\鮑魚\\dim_sex.xlsx',
'C:\\Users\\Hider\\Desktop\\python\\鮑魚\\鮑魚數據集.md']
```
使用遞歸的方式列出目錄及其子目錄下的文件。
os.listdir('dir') # 列出當前目錄下的所有文件
os.path.isdir('dir') # 判斷是否目錄,返回布爾值,不存在也返回False
os.path.isfile('dir') # 判斷是否文件
os.path.join('dir', 'dir2') # 連接路徑,返回全路徑
- 方法二
import os # 系統
path = r'C:\Users\Hider\Desktop\python'
# 定義函數
def print_files(path):
lsdir = os.listdir(path)
dirs = [i for i in lsdir if os.path.isdir(os.path.join(path, i))]
files = [i for i in lsdir if os.path.isfile(os.path.join(path, i))]
if files:
for f in files:
print(os.path.join(path, f))
if dirs:
for d in dirs:
print_files(os.path.join(path, d)) # 遞歸查找
# return 0
# 執行
print_files(path)
代碼執行的邏輯思路:
(1)先列出路徑下的所有文件;
(2)過濾目錄;
(3)過濾文件;
(4)判斷目錄下是否有文件,若有就打印出該文件;
(5)判斷目錄下是否有子目錄,若有就通過遞歸再遍歷子目錄下的文件或者目錄。
參考鏈接1:利用python列出當前目錄下的所有文件
參考鏈接2:python遞歸列文件_python遞歸列出目錄及其子目錄下所有文件
參考鏈接3:Python:打印某個路徑下的所有文件