### Python 实现递归遍历文件夹并删除文件 #### 方法一:递归删除特定文件夹(如 .svn) 在本方法中,我们利用Python的标准库`os`和`shutil`来递归地遍历文件夹并删除指定的文件夹(例如`.svn`文件夹)。这种做法适用于那些包含版本控制系统产生的文件夹,这些文件夹通常占用空间较大但对用户来说并不重要。 **核心思路:** 1. **遍历文件夹:** 使用`os.walk()`方法遍历指定路径下的所有子文件夹及其文件。 2. **检查文件夹名:** 如果遇到名为`.svn`的文件夹,则进行下一步操作;如果不是,则递归地对该子文件夹执行相同的操作。 3. **处理`.svn`文件夹:** - **修改权限:** 由于`.svn`文件夹通常被设置为只读,需要先使用`os.system('attrib -r ...')`命令修改文件夹权限,使其可被删除。 - **删除文件夹:** 使用`shutil.rmtree()`函数删除文件夹及其内容。 **代码示例:** ```python import os import shutil def delete_svn_folders(rootdir): for parent, dirnames, filenames in os.walk(rootdir): for dirname in dirnames: if dirname == '.svn': str_filepath = os.path.join(parent, dirname) if os.path.isdir(str_filepath): # 设置本文件夹可写 os.system('attrib -r ' + parent + '\\*.* /s') # 设置文件夹可写 os.system('attrib -r ' + str_filepath + '\\*.* /s') # 删除文件夹 shutil.rmtree(str_filepath) rootdir = "F:\\work\\Test" delete_svn_folders(rootdir) ``` #### 方法二:递归查找并输出特定文件或文件夹 本方法提供了另一种递归遍历文件夹的方式,用于查找特定的文件或文件夹,并输出它们的完整路径。 **核心思路:** 1. **定义递归函数:** `scandir(startdir, target)`函数接收起始目录`startdir`和要查找的目标`target`。 2. **切换目录:** 使用`os.chdir()`改变当前工作目录至`startdir`。 3. **列出当前目录内容:** 使用`os.listdir()`获取当前目录下的所有对象名称。 4. **检查每个对象:** - 如果对象名与目标匹配,则输出该对象的完整路径。 - 如果对象是文件夹,则再次调用`scandir()`函数递归搜索该文件夹。 - 每次递归调用后,通过`os.chdir(os.pardir)`返回上一级目录。 **代码示例:** ```python import os def scandir(startdir, target): os.chdir(startdir) for obj in os.listdir(os.curdir): if obj == target: print(os.getcwd() + os.sep + obj) if os.path.isdir(obj): scandir(obj, target) os.chdir(os.pardir) startdir = input('Please input startdir: ') target = input('Please input target: ') scandir(startdir, target) ``` #### 方法三:递归查找包含特定字符串的文本文件 这种方法可以帮助开发者快速定位含有特定字符串的文本文件,对于排查代码问题非常有用。 **核心思路:** 1. **定义递归函数:** `search_content(path, string)`函数接收起始路径`path`和要搜索的字符串`string`。 2. **遍历目录:** 对于给定的路径,使用`os.walk()`遍历该路径下的所有文件。 3. **检查文件类型:** 仅处理文本文件,排除图像、压缩文件等非文本文件。 4. **搜索字符串:** 对于每个文本文件,逐行读取并检查是否包含指定的字符串。 5. **输出结果:** 如果找到字符串,则输出文件名及首次出现该字符串的行号。 **代码示例:** ```python import sys import os filter_type = ['gif', 'png', 'bmp', 'jpg', 'jpeg', 'rar', 'zip', 'ico', 'apk', 'ipa', 'doc', 'docx', 'xls'] def search_content(path, string): for root, dirs, files in os.walk(path): for file in files: if file.split('.')[-1] not in filter_type: filepath = os.path.join(root, file) with open(filepath, 'r', encoding='utf-8') as f: for line_num, line in enumerate(f, start=1): if string in line: print(f"{filepath}: Line {line_num}") break if __name__ == "__main__": path = sys.argv[1] string = sys.argv[2] search_content(path, string) ``` 以上三种方法分别展示了如何使用Python递归地遍历文件夹、删除特定文件夹以及查找包含特定字符串的文本文件。这些技巧对于自动化文件管理和搜索非常有用,尤其适合需要频繁处理大量文件的场景。
- 粉丝: 4
- 资源: 1000
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助