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

1つの方法は、それらをリストに追加してから使用することです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 に答える