利用Python查看目录中的文件示例详解
### 利用Python查看目录中的文件 在日常的软件开发工作中,经常需要处理与文件相关的操作,例如查看某个目录下的所有文件、统计特定后缀文件的数量等。这些操作可以通过Python来轻松实现。本文将详细介绍如何使用Python来查看指定目录中的文件,并提供具体的代码示例。 #### 基础概念 在开始之前,我们需要了解一些基础概念: - **目录**:操作系统中用于组织文件的结构,类似于文件夹。 - **文件**:存储在计算机上的数据单元。 - **后缀名**:文件名后面的扩展名,通常用来表示文件的类型或格式。 - **递归**:一种算法设计思想,即函数直接或间接地调用自身来解决问题的方法。 #### Python中的os模块 Python内置的`os`模块提供了许多与操作系统交互的接口,如创建、删除文件或目录,改变当前工作目录等。本节将重点介绍如何使用`os`模块来查看目录中的文件。 ### 示例代码分析 #### 1. 递归列出目录下所有文件 ```python import os def tree_dir(path, c_path='', is_root=True): """ 获取path目录下所有文件的列表,类似于'tree'命令。 :param path: 根目录 :param c_path: 子目录 :param is_root: 当前是否为根目录 :return: 文件列表 """ res = [] if not os.path.exists(path): return res for f in os.listdir(path): if os.path.isfile(os.path.join(path, f)): if is_root: res.append(f) else: res.append(os.path.join(c_path, f)) else: # 递归处理子目录 res.extend(tree_dir(os.path.join(path, f), f, is_root=False)) return res ``` 这段代码实现了递归遍历指定目录下的所有文件,并返回一个包含所有文件路径的列表。其中,`os.path.exists()`用于检查路径是否存在,`os.path.isfile()`判断是否为文件,而`os.listdir()`则用于获取指定目录下的所有文件和目录名。 #### 2. 加入后缀名筛选 ```python def tree_dir_sur(path, c_path='', is_root=True, suffix=''): """ 获取path目录下所有符合后缀名要求的文件列表,类似于'tree'命令。 :param path: 根目录 :param c_path: 子目录 :param is_root: 当前是否为根目录 :param suffix: 后缀名 :return: 文件列表 """ res = [] if not os.path.exists(path) or not os.path.isdir(path): return res for f in os.listdir(path): if os.path.isfile(os.path.join(path, f)) and str(f).endswith(suffix): if is_root: res.append(f) else: res.append(os.path.join(c_path, f)) else: res.extend(tree_dir_sur(os.path.join(path, f), f, is_root=False, suffix=suffix)) return res ``` 此段代码在上一段的基础上增加了后缀名筛选功能。通过参数`suffix`指定后缀名,只返回符合该后缀名的文件列表。这样就可以更加精确地控制返回的文件类型。 #### 3. 统计目录下指定后缀文件的行数 ```python def count_by_categories(path): """ 找到所有目标文件并统计行数。 :param path: 目录路径 :return: 字典,键为类别名,值为行数 """ if not os.path.exists(path): return {} c_l_dict = {} # e.g., {category: lines} category_list = [cate for cate in os.listdir(path) if os.path.isdir(os.path.join(path, cate)) and not cate.startswith('.')] for category_dir in category_list: line_count = _sum_total_line(os.path.join(path, category_dir), '.md') if line_count > 0: c_l_dict[category_dir] = line_count return c_l_dict def _sum_total_line(path, endswith='.md'): """ 获取目标文件的总行数。 :param path: 目录路径 :param endswith: 后缀名 :return: 行数 """ if not os.path.exists(path) or not os.path.isdir(path): return 0 total_lines = 0 for f in os.listdir(path): if os.path.isfile(os.path.join(path, f)) and str(f).endswith(endswith): with open(os.path.join(path, f), 'r', encoding='utf-8') as file: total_lines += len(file.readlines()) return total_lines ``` 以上代码展示了如何统计指定目录下特定后缀文件的行数。首先通过`os.listdir()`获取目录下的所有条目,然后判断每个条目是否为目录,并进一步统计该目录下指定后缀的文件行数。这里使用了`open()`函数来打开文件,并通过`readlines()`方法获取文件中的行数。 ### 总结 本文详细介绍了如何使用Python来查看目录中的文件以及进行相关操作。通过递归的方式,我们可以轻松地遍历目录树中的每一个文件,并根据需求进行过滤。此外,我们还介绍了如何统计特定后缀文件的行数,这对于数据分析和文本处理非常有用。希望本文能对你理解和掌握Python文件操作有所帮助。
- 粉丝: 13
- 资源: 955
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助