gpt4 book ai didi

python - 计算目录和子目录中的文件数

转载 作者:太空宇宙 更新时间:2023-11-04 11:17:24 26 4
gpt4 key购买 nike

我正在尝试计算目录和子目录中的文件数,但得到的答案是错误的。

我有一个文件夹名称:train,其中包含 10 个子文件夹。每个子文件夹包含 900 个文件。

当我使用以下代码对文件进行计数时,我得到 0 个错误的文件(需要为 9000)。isfile 似乎不起作用。我错过了什么?

TRAIN_IMAGES_DIR = 'C:\\test\\train\\'


NUM_OF_FILES = 0
for subdir, dirs, files in os.walk(TRAIN_IMAGES_DIR):
for file in files:
print (file)
if os.path.isfile(file):
NUM_OF_FILES = NUM_OF_FILES + 1
else:
print("Folder: ", file)

print (NUM_OF_FILES)

我正在使用 python 3.7

最佳答案

你根本不需要使用isfile(),因为os.walk()已经将目录和文件分开了你。正确完成后,files 列表的所有元素的测试都将为 True。

问题在于每个文件名都是相对,它只是路径的最后一个元素。 os.path.isfile() 只能在当前工作目录中查找此类名称,而不是这些文件实际所在的位置。您必须使用 os.path.join(subdir, file) 将相对文件名转换为绝对路径。

但是,再次重申,不要使用 isfile(),那只是双重工作。 os.walk() 已经帮你整理好了文件。

以下将计算您的文件:

NUM_OF_FILES = 0
for subdir, dirs, files in os.walk(TRAIN_IMAGES_DIR):
NUM_OF_FILES = NUM_OF_FILES + len(files)

因为这里只需要知道列表的长度即可。您也可以使用 NUM_OF_FILES += len(files) 来增加长度。

甚至更短,使用 sum() function和一个 generator expression :

NUM_OF_FILES = sum(len(files) for _, _, files in os.walk(TRAIN_IMAGES_DIR))

如果这产生了一个高于预期 的数字,那么这意味着您拥有的文件比您预期的多。例如,您可能有隐藏 文件(在 POSIX 系统上,任何以 . 开头的文件都从目录列表中隐藏,除非您使用 ls -a 或类似的技术来揭示它们)。

您或许可以先根据文件扩展名过滤您的文件; os.path.splitext(file) 可以为您提供一个 (base, ext) 元组。或者只是过滤掉 file[0] == "." 值。

关于python - 计算目录和子目录中的文件数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56723506/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com