[英]Recursive function with for loop python
我有一个不应该太难的问题,但很长一段时间以来一直困扰着我。
我正在尝试编写一个函数,该函数在具有不同文件夹的目录中搜索所有扩展名为jpg
且大小大于0的文件。
然后,应打印这些类别中文件的大小总和。
我现在正在做的是
def myFuntion(myPath, fileSize):
for myfile in glob.glob(myPath):
if os.path.isdir(myFile):
myFunction(myFile, fileSize)
if (fnmatch.fnmatch(myFile, '*.jpg')):
if (os.path.getsize(myFile) > 1):
fileSize = fileSize + os.path.getsize(myFile)
print "totalSize: " + str(fileSize)
这没有给我正确的结果。 它对一个目录的文件大小进行求和,但对其余目录不做求和。 例如,如果我有这些路径
C:/trial/trial1/trial11/pic.jpg
C:/trial/trial1/trial11/pic1.jpg
C:/trial/trial1/trial11/pic2.jpg
和
C:/trial/trial2/trial11/pic.jpg
C:/trial/trial2/trial11/pic1.jpg
C:/trial/trial2/trial11/pic2.jpg
我会得到前三个的总和与后三个的大小,但如果合理的话,我将不会得到六个的大小。
您将忽略递归调用的结果; 调用之间不共享fileSize
。
不要将fileSize
传递给递归调用,而是对返回的大小求和:
def myFunction(myPath):
fileSize = 0
for myfile in glob.glob(myPath):
if os.path.isdir(myFile):
fileSize += myFunction(myFile)
if fnmatch.fnmatch(myFile, '*.jpg'):
fileSize += os.path.getsize(myFile)
return fileSize
然后打印最外层调用返回的最终总数:
print myFunction('C:/trial/')
您应该使用os.walk()解决此问题。
这就是我的做法-
import os
import sys
def get_file_size(path, extensions):
size = 0
for root, dirs, files in os.walk(path):
for file in files:
if (file.lower().endswith(extensions)):
size += os.path.getsize(os.path.join(root, file))
return size
print(get_file_size('.', ('jpg', 'jpeg')))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.