【问题标题】:Count all files in all folders/subfolders with Python使用 Python 计算所有文件夹/子文件夹中的所有文件
【发布时间】:2016-09-01 12:17:05
【问题描述】:

在 Python 中统计所有文件夹和子文件夹中的所有文件最有效的方法是什么?我想在 Linux 系统上使用它。

示例输出:

(路径文件)

/2

/bin 100

/启动 20

/boot/efi/EFI/redhat 1

....

/root 34

....

应该忽略没有文件的路径。

谢谢。

【问题讨论】:

  • 您认为有什么方法可以做到这一点?你有没有尝试过?

标签: python linux file count


【解决方案1】:

你可以用os.walk()来做;

import os

for root, dirs, files in os.walk('/some/path'):
    if files:
        print('{0} {1}'.format(root, len(files)))

请注意,这还将包括隐藏文件,即那些以点 (.) 开头的文件。

【讨论】:

  • 我也想要隐藏文件。那不是问题。但我现在收到此错误: Traceback (last recent call last): File "test.py", line 5, in print('{} {}'.format(root, len(files))) ValueError:格式中的零长度字段名称
  • 我得到同样的错误。您使用哪个 Python 版本?
  • @S.Kajmer:你使用的是什么版本的 Python?已知该错误会影响 Python 的一些早期版本。我已经更新了使用明确命名的字段的答案,这应该可以规避问题。
  • @MostWanted:答案已经更新,并发布了相同效果的评论。
【解决方案2】:
import os

print [(item[0], len(item[2])) for item in os.walk('/path') if item[2]]

它返回文件夹/子文件夹的元组列表以及/path 中的文件计数。

import os

for item in os.walk('/path'):
    if item[2]:
        print item[0], len(item[2])

它打印/path 中的文件夹/子文件夹和文件计数。

如果您想尝试更快的解决方案,那么您必须尝试结合:

os.scandir() # from python 3.5.2

递归迭代并使用:

from itertools import count

counter = count()
counter.next() # returns at first 0, next 1, 2, 3 ...

if counter.next() > 1000:
    print 'dir with file count over 1000' # and use continue in for loop

也许那会更快,因为我认为os.walk 函数对你来说是不必要的。

【讨论】:

  • 请发表评论。
  • 从字面上看,这回答了问题第一行中 OP 提出的问题,但是,它不会产生 OP 显示的输出。
  • 这会计算整个文件。请看我的示例输出。
  • 当然可以。已编辑。
  • 时机正好。我在 7 秒内从路径 / 统计了 178983 个文件。
猜你喜欢
  • 2020-02-03
  • 1970-01-01
  • 2020-06-23
  • 2020-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
相关资源
最近更新 更多