嘿伙計們,我不知道我是否可以問這個問題,但我正在處理 google collab 中的原始檔案,我撰寫了一個函式來總結檔案的所有大小
import os
def recls_rtsize(argpath):
sumsize = 0
for entry in os.scandir(argpath):
path= argpath '/' entry.name
size= os.path.getsize(path)
sumsize =size
return sumsize
print("total:",recls_rtsize('/var/log'))
但是我需要一種方法來使這個函式成為遞回函式,或者如果有某種公式或想法可以將非遞回轉換為遞回
uj5u.com熱心網友回復:
遞回函式是呼叫自身的函式。例如,如果您試圖計算某個目錄中所有檔案的總和,您可以遍歷該目錄的檔案并總結檔案的大小。如果您正在檢查的目錄有子目錄,那么您可以設定一個條件,如果目錄有子目錄,如果有,那么您可以為該子目錄呼叫函式本身。
在你的情況下:
import os
def recls_rtsize(argpath):
sumsize = 0
for entry in os.scandir(argpath):
# think of is_directory is your custom function that checks
# if this path is a directory
if entry.is_directory():
# then call your function for this directory
size = recls_stsize(entry)
else:
path = argpath '/' entry.name
size = os.path.getsize(path)
sumsize = size
return sumsize
print("total:",recls_rtsize('/var/log'))
uj5u.com熱心網友回復:
例如,您可以撰寫輔助函式來遞回處理它,盡管我不明白目的:
import os
def recls_rtsize(argpath):
def helper(dirs):
if not dirs:
return 0
path = argpath '/' dirs[0].name
size = os.path.getsize(path)
return size helper(dirs[1:])
return helper(list(os.scandir(argpath)))
print("total:", recls_rtsize('testing_package'))
解釋:
假設 argpath 包含幾個檔案:
argpath = [file1, file2, file2]
那么函式呼叫將是:
size(file1) recls_rtsize([file2, file2])我們在第一個元素之后傳遞所有內容
size(file1) size(file2) recls_rtsize([file3])
size(file1) size(file2) size(file3) recls_rtsize([])
沒有剩余元素,我們回傳0并開始回溯
size(file1) size(file2) size(file3) 0
size(file1) size(file2) (size(file3) 0)
size(file1) (size(file2) (size(file3) 0))
(size(file1) (size(file2) (size(file3) 0)))# 我們的結果
我希望它有意義
uj5u.com熱心網友回復:
要遍歷子檔案夾中的檔案(我假設這是您的目標),您可以使用os.walk().
例子
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/525249.html
標籤:Python递归
