我写了一个脚本,它总结了FTP服务器上子目录中文件的大小:
for dirs in ftp.nlst("."):
try:
print("Searching in "+dirs+"...")
ftp.cwd(dirs)
for files in ftp.nlst("."):
size += ftp.size(files)
ftp.cwd("../")
except ftplib.error_perm:
pass
print("Total size of "+serveradd+tvt+" = "+str(size*10**-9)+" GB")
除了总结所有目录的文件大小之外,是否有更快的方法来获取整个目录树的大小?
答案 0 :(得分:1)
Alex Hall评论说,这不是递归的。我将解决加速问题,因为您可以阅读许多来源的递归,例如here。 把它放在一边,你没有提到该目录中有多少文件,但你正在为目录中的每个文件花费一次完整的往返时间。而是要求服务器返回目录的整个列表并总结文件大小:
import re
class DirSizer:
def __init__(self):
self.size = 0
def add_list_entry(self, lst):
if '<DIR>' not in lst:
metadata = re.split(r'\s+', lst)
self.size += int(metadata[2])
ds = DirSizer()
ftp.retrlines('LIST', ds.add_list_entry) # add_list_entry will be called for every line
print(ds.size) # => size (shallow, currently) of the directory
请注意:
re.split
行或metadata[2]
部分。retrlines
和回调的解释。