0

出于某种原因,我想要这个:

a = ['ok.py', 'hello.py']

我想计算每个元素的大小并添加所有这些大小并存储在一个变量中:

for i in a:
        dest = '/home/zurelsoft/my_files'
        fullname = os.path.join(dest, i) #Get the file_full_size to calculate size
        st = int(os.path.getsize(fullname))
        f_size = size(st)

它对每个元素都这样做。我怎样才能将它们全部添加?

4

2 回答 2

2

一种方法是将它们添加到列表中,然后使用sum

sizes = []
for i in a:
        dest = '/home/zurelsoft/my_files'
        fullname = os.path.join(dest, i) #Get the file_full_size to calculate size
        st = int(os.path.getsize(fullname))
        f_size = size(st)
        sizes.append(f_size)
print sum(sizes)

或者你可以有一个变量。

sum_size = 0
for i in a:
        dest = '/home/zurelsoft/my_files'
        fullname = os.path.join(dest, i) #Get the file_full_size to calculate size
        st = int(os.path.getsize(fullname))
        sum_size += size(st)
print sum_size

或者你可以把它放在字典里......

d = {}
for i in a:
        dest = '/home/zurelsoft/my_files'
        fullname = os.path.join(dest, i) #Get the file_full_size to calculate size
        st = int(os.path.getsize(fullname))
        d[i] = size(st)

获得每个尺寸:

print '\n'.join(['%s: %d' % (k, v) for k, v in d.items()])

得到总和:

print sum(d.values())

将其全部包装到一个函数中,并使用类似于Ivo van der Wijk使用的方法:

def get_file_sizes(parent_dir, files):
    import os
    return sum([os.path.getsize(os.path.join(parent_dir, f)) for f in files])

调用函数:

a = ['ok.py', 'hello.py']
all_sizes = get_file_sizes('/home/zurelsoft/my_files', a)
于 2013-01-31T11:13:03.910 回答
1

您可以使用生成器将其减少为单个总和,如下所示:

sum(os.path.getsize(os.path.join("/etc", f)) for f in ["passwd", "hosts"])

基本上将您正在采取的各个步骤组合成一个可以传递给 sum() 的表达式

我不确定 size() 的作用,但您当然可以将其插入表达式中。当然,请确保它返回整数而不是字符串。

于 2013-01-31T11:21:30.353 回答