我想獲取目標目錄中所有檔案的串列,包括子目錄,路徑從目標目錄開始。
edit1:我想按字母順序將它插入正確的位置。
$ tree test
test
├── file
└── sub
├── fileinsub
├── otherfileinsub
└── sub2
└── fileinsub2
>>> print(os.listdir("test"))
['sub', 'file']
>>>print(recusivelistdir("test"))
['sub', 'sub/fileinsub', 'sub/otherfileinsub', 'sub/sub2', 'sub/sub2/fileinsub2' 'file']
編輯7:我的作業解決方案!
def recursivelistdir(target):
target_files = []
for dir, subdir, files in os.walk(target):
for i in range(len(files)):
target_files.append((os.path.join(dir, files[i])).removeprefix(f"{target}/"))
target_files.append((dir).removeprefix(f"{target}/"))
# Remove the duplicate entry
target_files = list(dict.fromkeys(target_files))
if target_files.__contains__(target):
target_files.remove(target)
return target_files
print(recursivelistdir("test")) # ['file', 'sub/fileinsub', 'sub', 'sub/otherfileinsub', 'sub/sub2/fileinsub2', 'sub/sub2']
uj5u.com熱心網友回復:
import os
def recusivelistdir(path):
result = []
for root,dirs,files in os.walk(path):
result.extend([root os.path.sep _dir for _dir in dirs])
result.extend([root os.path.sep file for file in files])
print(result)
recusivelistdir('path folder')
uj5u.com熱心網友回復:
您總是可以提出遞回解決方案,但在這種情況下,os模塊有一個很好的方法,根目錄os.walk(path)在哪里path
li=[]
for d,ds,fs in os.walk(path):
li =[f"{d}/{f}" for f in fs]
return li
在 for 內部,d將是當前目錄、ds內部所有子目錄的串列d和fs內部所有檔案的串列d,在 for 的每次迭代中,方法“遍歷”當前目錄內部的子目錄。
uj5u.com熱心網友回復:
使用 glob 你會喜歡的!
from glob import glob
target = "test" <REG_EX>
target_files = glob(target, recursive=True)
將 REG_EX 替換為您需要的任何 sub_dir 字串。
要詳細說明解決方案,請使用sortedglob 輸出對任何必要型別的目錄進行排序
sorted(glob.glob('./test/**/*',recursive=True)) #Sorts alphabetically.
如果您需要更多排序;
sorted(glob.glob(('./test/**/*',recursive=True),key=os.path.getmtime) # Sorts with mt time
sorted(glob.glob(('./test/**/*',recursive=True),key=os.path.getsize) # Sorts with size
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/515661.html
標籤:Python数组递归小路
