在尝试确定驱动器中文件夹的大小时,我最终会遇到无限循环。这是我正在使用的代码,
import os
from os.path import join, getsize
from sys import exit
filepath="P:\\GIS\\Data"
dirList=os.listdir(filepath)
for fname in dirList:
for root, dir, files in os.walk(filepath):
print root , sum([getsize(join(root, name)) for name in files]),
print "bytes in", len(files), "non-directory files"
print "All finished!"
我已经尝试将结果保存在变量中,但循环甚至没有达到该步骤并开始无限循环请你能告诉我哪里出错了吗?
答案 0 :(得分:0)
filepath="P:\\GIS\\Data"
dirList=os.listdir(filepath)
for fname in dirList:
for root, dir, files in os.walk(filepath):
您想要遍历"P:\\GIS\\Data"
内的每个目录树,这就是您在第二个循环中所做的事情。但是,您正在为此目录中的每个目录执行此 ,因为您首先迭代dirList
,而您甚至不使用fname
。
因此,对于dirList
中的每个目录,您都会重复执行相同的print
,这会给您带来无限循环的错误印象。
尝试删除for fname in dirList:
,您的脚本应该到达目的地。
答案 1 :(得分:0)
由于os.walk,因此不可能是无限循环或递归,因为
默认情况下,walk()不会向下走到解析的符号链接 到目录。将followlinks设置为True以访问指向的目录 通过符号链接,在支持它们的系统上。
但是你确实有一个嵌套循环,这可能会给你的代码带来无限循环的印象。
您可以简化此操作以避免嵌套循环
for root, dir, files in os.walk("P:\\GIS\\Data"):
print root , sum([getsize(join(root, name)) for name in files]),
print "bytes in", len(files), "non-directory files"
我相信这会产生预期的结果。