使用python获取位于硬盘内的多个文件的大小

时间:2013-09-08 07:04:36

标签: python

这个问题是关于获取位于硬盘内的多个文件的大小。 代码已基于以下答案进行了改进:

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

怎么了?

2 个答案:

答案 0 :(得分:1)

if item < 1000:
            size = str (item) + 'K'
            if item > 1000:
                #this will never execute
                #since you have already asserted that item < 1000

答案 1 :(得分:1)

看起来你正在努力嵌套if语句。第一个if之后的所有内容都不会执行,除非项目足够小,如果你到达那么远,第二个if之后就不会执行任何内容。

我假设你想根据文件的大小将size设置为不同的东西,然后总是输出一行到你的输出文件。 Unindenting会这样做。我还将您的第二个if更改为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条件。< / p>