在这里python newb非常抱歉,这是一个非常基本的问题,但是我试图通过通用的google搜索来弄清楚这一点,并且似乎无法获得我正在寻找的答案。所以,我恳请stackoverflow的上帝来帮助我...
这是我的情况:
我有一个目录,其中包含多个子目录和这些子目录中的多个文件。子目录代表一个数字对象(一本物理书),内部文件是与对象“页面”相对应的.tif文件。我希望能够遍历这些子目录并计算其中的.tif文件数,但是对于每个子目录,我希望计数从1开始,从而代表该“书”的“页码”。
我似乎能弄清楚的是如何以线性方式对文件进行计数。这是我一直在使用的代码:
Label = 0
for rootDir, subdir, filenames in os.walk('/Users/kaylaheslin/Desktop/mets_test'):
for filename in fnmatch.filter(filenames, "*.tif"):
Label += 1
print(Label)
当然,这会遍历文件并在每次找到.tif文件时添加一个文件,但是我需要为每个子目录以@ 1开始。有人请帮忙!我想知道我在做什么错。
答案 0 :(得分:0)
交换前两行会做什么吗?
for rootDir, subdir, filenames in os.walk('/Users/kaylaheslin/Desktop/mets_test'):
Label = 0
for filename in fnmatch.filter(filenames, "*.tif"):
Label += 1
print(Label)
这样,您每次通过外循环时都会重置Label
。换句话说,每次您进入新的子目录时,都会从0开始重新计数。
此外,如果要将数字与每个文件相关联,也许可以首先避免使用计数器变量:
for rootDir, subdir, filenames in os.walk('/Users/kaylaheslin/Desktop/mets_test'):
tif_files = fnmatch.filter(filenames, "*.tif")
for i, file in enumerate(tif_files):
print(i)
答案 1 :(得分:0)
您可以创建每个文件夹名称和文件数量的字典:
import os
Label = 0
dd = {}
for rootDir, subdir, filenames in os.walk('/Users/kaylaheslin/Desktop/mets_test'):
for filename in filenames:
if filename.endswith('.tif'):
if rootDir in dd:
dd[rootDir]+=1
else:
dd[rootDir]=1
for k in dd:
print(k,dd[k])