利用Python查看目录中的文件示例详解


Posted in Python onAugust 28, 2017

前言

我们在日常开发中,经常会遇到一些关于文件的操作,例如,实现查看目录内容的功能。类似Linux下的tree命令。统计目录下指定后缀文件的行数。

功能是将目录下所有的文件路径存入list中。可以加入后缀判断功能,搜索指定的后缀名文件。主要利用递归的方法来检索文件。

仿造 tree 功能示例代码

Python2.7

列出目录下所有文件

递归法

import os
def tree_dir(path, c_path='', is_root=True):
 """
 Get file list under path. Like 'tree'
 :param path Root dir
 :param c_path Child dir
 :param is_root Current is root dir
 """
 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

下面是加入后缀判断的方法。在找到文件后,判断一下是否符合后缀要求。不符合要求的文件就跳过。

def tree_dir_sur(path, c_path='', is_root=True, suffix=''):
 """ Get file list under path. Like 'tree'
 :param path Root dir
 :param c_path Child dir
 :param is_root Current is root dir
 :param suffix Suffix of file
 """
 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
if __name__ == "__main__":
 for p in tree_dir_sur(os.path.join('E:\ws', 'rnote', 'Python_note'), suffix='md'):
 print p

统计目录下指定后缀文件的行数

仅适用os中的方法,仅检索目录中固定位置的文件

# -*- coding: utf-8 -*-
import os
def count_by_categories(path):
 """ Find all target files and count the lines """
 if not os.path.exists(path):
 return
 c_l_dict = 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'):
 """ Get the total lines of target files """
 if not os.path.exists(path) or not os.path.isdir(path):
 return 0
 total_lines = 0
 for f in os.listdir(path):
 if f.endswith(endswith):
  with open(os.path.join(path, f)) as cur_f:
  total_lines += len(cur_f.readlines())
 return total_lines
if __name__ == '__main__':
 note_dir = 'E:/ws/rnote'
 ca_l_dict = count_by_categories(note_dir)
 all_lines = 0
 for k in ca_l_dict.keys():
 all_lines += ca_l_dict[k]
 print 'all lines:', str(all_lines)
 print ca_l_dict

以笔记文件夹为例,分别统计分类目录下文件的总行数,测试输出

all lines: 25433
{'flash_compile_git_note': 334, 'Linux_note': 387, 'Algorithm_note': 3637, 'Comprehensive': 216, 'advice': 137, 'Java_note': 3013, 'Android_note': 11552, 'DesignPattern': 2646, 'Python_note': 787, 'kotlin': 184, 'cpp_note': 279, 'PyQt_note': 439, 'reading': 686, 'backend': 1136}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
深度剖析使用python抓取网页正文的源码
Jun 11 Python
python通过pil模块获得图片exif信息的方法
Mar 16 Python
Python中import导入上一级目录模块及循环import问题的解决
Jun 04 Python
python3 pillow生成简单验证码图片的示例
Sep 19 Python
浅谈Django自定义模板标签template_tags的用处
Dec 20 Python
python opencv实现任意角度的透视变换实例代码
Jan 12 Python
python中kmeans聚类实现代码
Feb 23 Python
对numpy中的transpose和swapaxes函数详解
Aug 02 Python
django一对多模型以及如何在前端实现详解
Jul 24 Python
Tensorflow进行多维矩阵的拆分与拼接实例
Feb 07 Python
获取CSDN文章内容并转换为markdown文本的python
Sep 06 Python
python 利用PyAutoGUI快速构建自动化操作脚本
May 31 Python
Python如何通过subprocess调用adb命令详解
Aug 27 #Python
Python中序列的修改、散列与切片详解
Aug 27 #Python
Python正确重载运算符的方法示例详解
Aug 27 #Python
深入学习Python中的上下文管理器与else块
Aug 27 #Python
python利用MethodType绑定方法到类示例代码
Aug 27 #Python
Python中使用haystack实现django全文检索搜索引擎功能
Aug 26 #Python
python读取excel表格生成erlang数据
Aug 26 #Python
You might like
PHP中usort在值相同时改变原始位置问题的解决方法
2011/11/27 PHP
PHP获取windows登录用户名的方法
2014/06/24 PHP
php获取字符串中各个字符出现次数的方法
2015/02/23 PHP
php去除头尾空格的2种方法
2015/03/16 PHP
分享PHP守护进程类
2015/12/30 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
Display SQL Server Login Mode
2007/06/21 Javascript
JS查看对象功能代码
2008/04/25 Javascript
js 复制或插入Html的实现方法小结
2010/05/19 Javascript
JavaScript NaN和Infinity特殊值 [译]
2012/09/20 Javascript
jQuery学习笔记之jQuery.fn.init()的参数分析
2014/06/09 Javascript
js实现鼠标经过时图片滚动停止的方法
2015/02/16 Javascript
使用JQuery在线制作ppt并在线演示源码特效
2015/09/08 Javascript
Backbone.js框架中简单的View视图编写学习笔记
2016/02/14 Javascript
JS简单循环遍历json数组的方法
2016/04/22 Javascript
location.hash保存页面状态的技巧
2016/04/28 Javascript
js中常用的Tab切换效果(推荐)
2016/08/30 Javascript
NW.js 简介与使用方法
2018/02/01 Javascript
vue计算属性及使用详解
2018/04/02 Javascript
jQuery仿移动端支付宝键盘的实现代码
2018/08/15 jQuery
解决vue中使用proxy配置不同端口和ip接口问题
2019/08/14 Javascript
Python3实战之爬虫抓取网易云音乐的热门评论
2017/10/09 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
Numpy与Pytorch 矩阵操作方式
2019/12/27 Python
python用pip install时安装失败的一系列问题及解决方法
2020/02/24 Python
python实现梯度下降和逻辑回归
2020/03/24 Python
Django跨域请求原理及实现代码
2020/11/14 Python
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
学院书画协会部门岗位职责
2013/12/01 职场文书
中秋寄语大全
2014/04/11 职场文书
实习计划书范文
2015/01/16 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书
幼儿园2016年感恩节活动总结
2016/04/01 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS
Django项目如何正确配置日志(logging)
2021/04/29 Python
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
2021/06/22 Python