首页 > 解决方案 > 如何使用递归目录搜索使文件计数为零?

问题描述

我正在尝试获取特定文件名匹配的文件计数并写入字典。如果所有目录都包含一些文件(匹配或不匹配),则以下代码可以正常工作。但是,如果有一个空目录,它就不会显示在字典中。Folder2 为空,并且未显示在结果中。我还想知道是否有一种方法可以使用一个正斜杠分隔符而不是双反斜杠和正斜杠的组合来打印结果?我的代码:

import os
import re
def file_count_search(root_dir,keyword):
    dict={}
    for dirpath,dirnames,filenames in os.walk(root_dir,topdown=True):
        matches = re.findall(keyword, str(filenames))
        if keyword in matches:
            dict[os.path.join(root_dir,dirpath)] = len(matches)
    print dict
file_count_search("c://test","file")

我的结果:

{
    'c://test\\folder3\\subdir_folder3': 1, 
    'c://test': 1, 'c://test\\folder1': 3,
    'c://test\\folder3': 1
}

期望的结果:

{
    'c:/test/folder3/subdir_folder3': 1,
    'c:/test': 1, 'c:/test/folder1': 3,
    'c:/test/folder2': 0,
    'c:/test/folder3': 1
}

标签: pythonfiledirectory

解决方案


如果给定目录中没有匹配的文件,matches则将是一个空列表,因此keyword in matches将评估为False,并且不会将任何内容添加到dict

尝试替换此行:

if keyword in matches:
  dict[os.path.join(root_dir,dirpath)] = len(matches)

仅此(也dict根据 Dan Farrell 的注释替换为非保留变量名):

path_to_match_count[os.path.join(root_dir,dirpath)] = len(matches)

...对于这样的更新脚本:

import os
import re
def file_count_search(root_dir,keyword):
    path_to_match_count={}
    for dirpath,dirnames,filenames in os.walk(root_dir,topdown=True):
        matches = re.findall(keyword, str(filenames))
        path_to_match_count[os.path.join(root_dir,dirpath)] = len(matches)
    print path_to_match_count
file_count_search("c://test","file")

推荐阅读