Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中计算目录中的一组扩展(图像)_Python_Python 3.x - Fatal编程技术网

在Python中计算目录中的一组扩展(图像)

在Python中计算目录中的一组扩展(图像),python,python-3.x,Python,Python 3.x,我有一个混合文件的文件夹,只想要一个图像类型的文件计数。下面将返回目录中的所有文件,而不仅仅是图像。我做错了什么 extensions = ['.jpg','.png','.gif'] DL_path = os.getcwd() for dirpath, dirnames, files in os.walk(DL_path): for original_file in files: todays_files = sum(1 for x in files if any(ne

我有一个混合文件的文件夹,只想要一个图像类型的文件计数。下面将返回目录中的所有文件,而不仅仅是图像。我做错了什么

extensions = ['.jpg','.png','.gif']
DL_path = os.getcwd()
for dirpath, dirnames, files in os.walk(DL_path):
    for original_file in files:
        todays_files = sum(1 for x in files if any(needle in original_file for needle in extensions))
        print(todays_files)
如果我有一个jpg、一个png和两个txt文件。今天的\u文件应返回2,但返回4。

您可以使用以避免重复项目:

>>> found_extensions = set()
>>> found_extensions.add('.png')
>>> found_extensions.add('.png')  # try to add .png again
>>> found_extensions
{'.png'}   # <-- appear only once

更新以获取每个目录的匹配文件计数数:

import os

extensions = {'.jpg','.png','.gif'}  # set literal

for dirpath, dirnames, files in os.walk(os.getcwd()):
    count = sum(os.path.splitext(f)[-1] in extensions for f in files)
    print(dirpath, count)
扩展名中的splitext(f)[-1]将检查文件是否具有所需的扩展名,并返回
True
(=1)/
False
(=0)。把它们加起来就会得到你想要的

>>> True == 1
True
>>> False == 0
True
>>> sum([True, False, False, True, False])
2
原始文件
上迭代将循环文件名中的每个字符。由于非空字符串的计算结果为
True
any
函数总是返回
True
。所以你在数每个文件。我错过了阅读循环的内容

相反,您可以获取每个文件的扩展名,然后检查它是否在您关心的文件类型列表中

import os
extensions = ['.jpg','.png','.gif']
DL_path = os.getcwd()
todays_files = []
for dirpath, dirnames, files in os.walk(DL_path):
    for original_file in files:
        filename, file_extension = os.path.splitext(original_file)
        if file_extension in extensions:
            todays_files.append(original_file)
    print(dirpath, len(todays_files))

当我在目录中的1 jpg,1 gif,2 txt中这样做时,它确实返回2,但是下一个目录,有1 jpg,2 gif,和1 txt,它仍然返回2,当我需要它返回3时。@ScottC,我误解了你的问题。我更新了答案。请再检查一遍。
import os
extensions = ['.jpg','.png','.gif']
DL_path = os.getcwd()
todays_files = []
for dirpath, dirnames, files in os.walk(DL_path):
    for original_file in files:
        filename, file_extension = os.path.splitext(original_file)
        if file_extension in extensions:
            todays_files.append(original_file)
    print(dirpath, len(todays_files))