这个问题是关于获取位于硬盘内的多个文件的大小。 代码已基于以下答案进行了改进:
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
怎么了?
答案 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>