1

この質問は、ハードディスク内にある複数のファイルのサイズを取得することに関するものです。ここでの回答に基づいて、コードが改善されました。

import os, glob
with open ('file_size.txt', 'w') as outfile:
    files= glob.glob ('*.jpg')
    for file in files:
        get_sizes = os.path.getsize (file)
        for item in get_sizes:
            if item < 1000:
                size = str (item) + 'K'
            else:
                size = str (round ((item/(1024*1024)),1)) + 'M'
            file_name = os.path.basename (file)
            outfile.write(file_name + ' ' + size + '\n')

ただし、上記のコードでも次のエラーが発生します。

Traceback (most recent call last):
  File "G:\test\test.py", line 6, in <module>
    for item in get_sizes:
TypeError: 'int' object is not iterable

どうしたの?

4

2 に答える 2

2

if ステートメントのネストに苦労しているようです。ifアイテムが十分に小さい場合を除き、最初のものより後のすべては実行されませんif

sizeファイルの大きさに基づいて別のものに設定し、常に出力ファイルに行を出力したいと思います。インデント解除はそれを行います。また、どちらか一方が常に実行ifされるように、秒をに変更しました。else

また、os.path.getsize() は 1 つのファイルのサイズのみを返すため、結果をループする必要はありません。

import os, glob
with open ("file_size.txt", "w") as outfile:
    files= glob.glob ("G:\\*.jpg")
    for file in files:
        get_size = os.path.getsize (file)
        if get_size < 1000:
            size = str (item) + 'K'
        else:
            size = str (round ((item/(1024*1024)),1)) + 'M'
        out_name = os.path.basename (file)
        outfile.write(out_file + " " + size + "\n")

これにより、条件に依存するのではなく、ステートメントが常に実行されるように、ステートメントの外部への割り当てout_nameと書き込みが行われます。outfileifif

于 2013-09-08T07:14:45.313 に答える
1
if item < 1000:
            size = str (item) + 'K'
            if item > 1000:
                #this will never execute
                #since you have already asserted that item < 1000
于 2013-09-08T07:09:34.353 に答える