【问题标题】:Python use count in list列表中的 Python 使用计数
【发布时间】:2018-10-31 23:05:32
【问题描述】:

我想列出我保存的所有 wifi 文件,每个文件前面都有一个数字,但我的输出不是我的代码。

import os,
path = '/etc/NetworkManager/system-connections/'
dirs = os.listdir(path)
count = sum([len(files) for r, d, files in os.walk(path)])

for file in dirs:
   for item in range(count):
   print(item, file)

预期输出:

1 wifi 测试

2 安卓AP

3 安卓AP测试

现在输出:

0 wifi 测试

1个安卓AP

2 安卓AP测试

0 wifi 测试

1个安卓AP

2 安卓AP测试

然后重新开始

【问题讨论】:

  • 这就是嵌套循环的作用。你会想查找enumerate

标签: python python-3.x range directory


【解决方案1】:

循环中的循环如何工作

我认为您对将循环放入循环时会发生什么有误解,所以让我先解释一下。

如果你有,例如

for item_a in ['a', 'b']:
  for item_b in ['1', '2']:
    print(item_a + item_b)

那么你的输出将是:

a1

a2

b1

b2

代码将首先在a 循环中开始,然后它会遍历内部循环中的两个项目。完成后,外循环中的下一项是b,然后它将再次遍历内循环中的两项。

如果您想跟踪您在循环中遍历了多少项目,您可以使用这种类型的模式:

count = 0
for item_a in ['a', 'b']:
  count = count + 1
  print( str(count) + item_a)

这会导致

1a

2a

但是有一个捷径。您可以使用一个名为 enumerate 的漂亮函数来获取 for 循环中每个项目的计数。

for count, item_a in enumerate(['a', 'b']):
  print( str(count) + item_a)

这也会给你

1a

2a


解决您的问题

说了这么多,您可以像这样创建文件列表

# First we loop over os.walk to get the files in the current directory and all sub-directories
for root, dirs, files in os.walk(path):

   # And then using enumerate, we can consolidate those two for loops into one loop that properly counts everything
   for item, file in enumerate(files):
      print(item, os.path.join(root, file))

如果你不关心子目录,你可以这样做

for item, file in enumerate(os.listdir(path)):
  print(item, file)

【讨论】:

  • 哇,感谢您所做的一切,让我的一天变得轻松了很多
【解决方案2】:

不清楚您想要的代码是什么。 count 是干什么用的?

也许这就是你想要的:

import os

path = '/etc/NetworkManager/system-connections/'
dirs = os.listdir(path)

for num, file in enumerate(dirs):
  print(num+1, file)

【讨论】:

    【解决方案3】:

    我不确定 count 应该在这里做什么,但如果你想要目录(不是子目录)中的文件,你只需要 os.listdir。

    import os
    path = '/etc/NetworkManager/system-connections/'
    dirs = os.listdir(path)
    
    for i in range(len(dirs)):
        print(i + 1, dirs[i])
    

    【讨论】:

      【解决方案4】:

      这正是嵌套循环的作用。

      独立检查循环的输出:

      它说你的目录有 2 个文件。

      所以这是您要查看的第一件事。因为如果输出应该是一个,那么它在 dirs 中计算另一件事。它在数什么?通过单独打印循环来调试它。

      另外,对于下一个问题,您可以通过硬编码一个无辜的+1 来解决它

      print(item + 1, file)
      

      【讨论】:

        猜你喜欢
        • 2022-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多