python - 如何使用递归目录搜索使文件计数为零?
问题描述
我正在尝试获取特定文件名匹配的文件计数并写入字典。如果所有目录都包含一些文件(匹配或不匹配),则以下代码可以正常工作。但是,如果有一个空目录,它就不会显示在字典中。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
}
解决方案
如果给定目录中没有匹配的文件,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")
推荐阅读
- python - 如何计算 geopandas 数据框上的共享边长度
- python - 如何使用 XML 将带有图像的按钮添加到 PyGtk 中的菜单?
- python - ImportError:没有名为 pynput 的模块
- javascript - 测试失败时如何获取控制台日志 POSTMAN
- javascript - Cheerio 没有选择特定的元素
- c++ - 如何解决 M1 Mac 中的“未找到架构 arm64 的符号”
- mongodb - 如何从 MongoDB 中的数组中查询具有最新日期的对象?
- javascript - 如何使用 Ethers.js 制作自定义链连接按钮
- javascript - 使用 localStorage 设置颜色主题
- css - 对称按钮 css 样式