我有一个问题,不应该太难,但长期以来一直困扰着我
我正在尝试编写一个函数,在具有不同文件夹的目录中搜索具有扩展名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
我会得到前三个的总和以及最后三个的大小,但如果这有意义,我将不会得到6个的大小。
答案 0 :(得分:1)
你忽略了递归调用的结果;调用之间不共享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/')
答案 1 :(得分:1)
您应该使用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')))