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为 an else,以便始终执行一个或另一个。

另外, os.path.getsize() 只返回一个文件的大小,所以你不需要循环结果。

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和写入到outfile您的if语句之外,以便它们始终执行,而不是依赖于if条件。

于 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 回答