最近在实际工作中遇到一个需求,需要检测一个大文件夹下所有文件的更新状态,这个大文件夹下面包含了很多文件和文件夹,文件夹中又包含了很多文件和文件夹...... 类似下面这张图片 。
文章插图
【使用python构建递归算法,实现查找电脑中的所有文件】看到这么多层的包含嵌套关系,我们首先想到的可能是使用for循环,但是在这个需求中,for循环不能满足我们的要求,原因有两个:
- 1、我不能确定文件夹中到底嵌套了多少层
- 2、使用for循环为增加代码量并且不好维护
文章插图
由于这些痛点,我们选择使用递归算法来实现 。递归算法,通俗的解释是后一步需要依据前一步的结果来进行,所以我们可以定义一个函数,在满足条件的是的在函数内部调用这个函数: 我们先来看Python代码:
file_list = []def get_file_url(session, next_url): next_response = session.get('https://gitlab.com' + next_url) soup = BeautifulSoup(next_response.text, 'html.parser') folders = soup.find_all('tr', class_=re.compile("^tree-item file_")) for folder in folders: folder_name = folder.find('td').find('a').attrs['title'] folder_url = folder.find('td').find('a').attrs['href']if len(folder_name.split('.')) > 1: file_list.Append(folder_url) else: get_file_url(session, folder_url)
文章插图
逻辑其实很简单,我们首先判断一下,如果这个文件含有后缀,我们就判断它是个文件,否则就判断它是一个文件夹 。当判断是文件夹的时候,就接着调用这个函数,直到文件中包含文件,不包含文件夹,本次递归停止 。
很多人学了很多算法之后不知道怎么用,这就是一个很好的例子,只不过我是在网页上递归寻找文件,你也可以自己在本地试一试 。
推荐阅读
- 为啥使用微信“收付款”,不用密码也能直接支付成功?
- 如果你使用华为手机,要记得调整这些设置,好用真的没得说
- 手机话费太多怎么办?多余话费如何使用
- 泡茶杯的使用注意四大项
- Python爬虫框架scrapy爬取腾讯招聘
- 菜鸟如何用python操作MongoDB?
- Linux杀不死的进程之CPU使用率700%
- js中数组 slice 和 splice 的使用
- 数据库不使用外键的 9 个理由
- OPPO A8语音助手有哪些功能?如何使用?