利用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实现从一组颜色中找出与给定颜色最接近颜色的方法
Mar 19 Python
Python实现的飞速中文网小说下载脚本
Apr 23 Python
浅谈django中的认证与登录
Oct 31 Python
python多个模块py文件的数据共享实例
Jan 11 Python
Python3.5多进程原理与用法实例分析
Apr 05 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
Apr 28 Python
django之自定义软删除Model的方法
Aug 14 Python
Python数据可视化:泊松分布详解
Dec 07 Python
python时间与Unix时间戳相互转换方法详解
Feb 13 Python
python代码实现TSNE降维数据可视化教程
Feb 28 Python
C++和python实现阿姆斯特朗数字查找实例代码
Dec 07 Python
pycharm 快速解决python代码冲突的问题
Jan 15 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语法(3)
2006/10/09 PHP
实现 win2003 下 mysql 数据库每天自动备份
2006/12/06 PHP
PHP 变量类型的强制转换
2009/10/23 PHP
php删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
2013/06/27 PHP
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
Yii全局函数用法示例
2017/01/22 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
2017/05/04 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
利用javascript中的call实现继承
2007/01/22 Javascript
javascript function、指针及内置对象
2009/02/19 Javascript
javascript parseInt与Number函数的区别
2010/01/21 Javascript
javascript Window及document对象详细整理
2011/01/12 Javascript
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
JavaScript将XML转成JSON的方法
2015/03/12 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
AngularJs  Understanding Angular Templates
2016/09/02 Javascript
jquery.Callbacks的实现详解
2016/11/30 Javascript
vue.js绑定class和style样式(6)
2016/12/09 Javascript
详解使用angular-cli发布i18n多国语言Angular应用
2017/05/20 Javascript
React利用插件和不用插件实现双向绑定的方法详解
2017/07/03 Javascript
Js数组扁平化实现方法代码总汇
2020/11/11 Javascript
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
2017/09/20 Python
对numpy.append()里的axis的用法详解
2018/06/28 Python
python实现linux下抓包并存库功能
2018/07/18 Python
Pytorch Tensor的统计属性实例讲解
2019/12/30 Python
基于Pycharm加载多个项目过程图解
2020/01/19 Python
pytorch中的weight-initilzation用法
2020/06/24 Python
Django filter动态过滤与排序实现过程解析
2020/11/26 Python
荷兰演唱会和体育比赛订票网站:viagogo荷兰
2018/04/08 全球购物
军用级手机壳,专为冒险而建:Zizo Wireless
2019/08/07 全球购物
实习生求职自荐信
2014/02/07 职场文书
建筑公司员工自我鉴定
2014/04/08 职场文书
服务理念口号
2014/06/11 职场文书
高一军训决心书
2015/02/05 职场文书
你离财务总监还有多远?速览CFO的岗位职责
2019/11/18 职场文书
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技