在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))