利用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 13 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
Jul 08 Python
python 搭建简单的http server,可直接post文件的实例
Jan 03 Python
python统计中文字符数量的两种方法
Jan 31 Python
Python3.5面向对象程序设计之类的继承和多态详解
Apr 24 Python
详解Python字符串切片
May 20 Python
pyqt5 QProgressBar清空进度条的实例
Jun 21 Python
使用Pandas的Series方法绘制图像教程
Dec 04 Python
Python-opencv实现红绿两色识别操作
Jun 04 Python
python如何输出反斜杠
Jun 18 Python
Python调用JavaScript代码的方法
Oct 27 Python
python爬取代理ip的示例
Dec 18 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中echo,print_r与var_dump区别分析
2014/09/29 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
2017/02/04 PHP
JavaScript 利用StringBuffer类提升+=拼接字符串效率
2009/11/24 Javascript
js模拟类继承小例子
2010/07/17 Javascript
jquery+ajax每秒向后台发送请求数据然后返回页面的代码
2011/01/17 Javascript
脚本合并提升javascript性能示例
2014/02/24 Javascript
javascript基本类型详解
2014/11/28 Javascript
jQuery应用之jQuery链用法实例
2015/01/19 Javascript
js实现的简单radio背景颜色选择器代码
2015/08/18 Javascript
jquery+php实现滚动的数字特效
2015/11/29 Javascript
js操作数组函数实例小结
2015/12/10 Javascript
基于JavaScript实现随机颜色输入框
2016/12/10 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
Vue press 支持图片放大功能的实例代码
2018/11/09 Javascript
vue使用keep-alive实现组件切换时保存原组件数据方法
2020/10/30 Javascript
JavaScript实现点击自制菜单效果
2021/02/02 Javascript
[03:01]完美盛典趣味短片 DOTA2年度最佳&拉胯英雄
2019/12/07 DOTA
Python实现迭代时使用索引的方法示例
2018/06/05 Python
无法使用pip命令安装python第三方库的原因及解决方法
2018/06/12 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
python十进制转二进制的详解
2020/02/07 Python
Python如何爬取qq音乐歌词到本地
2020/06/01 Python
Keras 实现加载预训练模型并冻结网络的层
2020/06/15 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
CSS3过渡transition效果实例介绍
2016/05/03 HTML / CSS
俄罗斯游戏商店:Buka
2020/03/01 全球购物
初中校园广播稿
2014/02/02 职场文书
《尊严》教学反思
2014/02/11 职场文书
创建卫生先进单位实施方案
2014/03/10 职场文书
县级领导干部开展党的群众路线教育实践活动工作汇报
2014/10/25 职场文书
小学教研工作总结2015
2015/05/13 职场文书
地道战观后感300字
2015/06/04 职场文书
小学入学感言
2015/08/01 职场文书
离婚协议书范本(2016最新版)
2016/03/18 职场文书
Python网络编程之ZeroMQ知识总结
2021/04/25 Python
详解vue中v-for的key唯一性
2021/05/15 Vue.js