如何在for循环(python)中重置增量变量?

时间:2020-09-26 23:46:52

标签: python for-loop

在这里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开始。有人请帮忙!我想知道我在做什么错。

2 个答案:

答案 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])
相关问题