鱼C论坛

 找回密码
 立即注册
查看: 3193|回复: 4

[已解决]递归搜索文件夹问题

[复制链接]
发表于 2023-7-30 22:00:53 | 显示全部楼层
根据您提供的代码,我看到其中存在一些问题。以下是您可以考虑修改的地方:

1. 在show_result()函数中,循环变量应该是file_list而不是source_list。请将代码修改为:
  1. for i in file_list:
  2.     lines = source_list[i]
  3.     total += lines
  4.     text += "【%s】源文件 %d 个,源代码 %d 行\n" % (i, file_list[i], lines)
复制代码

2. 在calc_code()函数中,您在使用open函数打开文件时,忘记了传递文件名参数。请将代码修改为:
  1. with open(file_name, 'r', encoding='utf-8') as f:
复制代码
并且将UnicodeDecodeError的处理方式修改为:
  1. except UnicodeDecodeError:
  2.     pass  # 不可避免会遇到格式不兼容的文件,这里忽略掉...
复制代码

3. 在search_file()函数中,os.chdir()调用后,应该返回上一层目录以继续遍历其他文件。请将代码修改为:
  1. os.chdir(os.path.pardir)  # 返回上一级目录
复制代码

4. 在主程序部分,您在调用show_result()函数时,传递的参数是path变量,但在show_result()函数中并未使用该参数。您可以直接将search_file(path)修改为search_file(start_dir),然后在show_result()函数中使用start_dir

请注意,修改代码时应注意代码缩进的正确性以及变量名的一致性。希望这些修改可以帮助您解决问题。如果还有其他疑问,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-31 07:36:55 | 显示全部楼层    本楼为最佳答案   
davidmou 发表于 2023-7-30 20:26
为什么search_file(os.getcwd())递归后还要os.chdir(os.path.pardir)

感谢您提出的问题!在search_file()函数中,为了能够递归地遍历目录树并搜索文件,我们需要使用os.chdir()函数切换到当前目录的子目录。而在子目录递归完成后,我们需要返回上一级目录以继续搜索其他文件。这就是为什么在search_file()函数中使用os.chdir(os.path.pardir)来返回上一级目录。

具体来说,os.getcwd()返回当前工作目录的路径,而os.chdir(os.path.pardir)将当前工作目录切换到其父目录(上一级目录)。这样,在递归调用search_file()函数后,程序会返回到上一级目录,然后继续搜索其他文件。

这个步骤是为了确保程序能够在整个目录树中遍历所有文件,并找到目标文件。

希望这个解释能够帮助您理解为什么需要在递归后使用os.chdir(os.path.pardir)。如果还有任何疑问,请随时提问!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-29 06:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表