利用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执行get提交的方法
Apr 29 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
Aug 25 Python
python实现机械分词之逆向最大匹配算法代码示例
Dec 13 Python
python matlibplot绘制多条曲线图
Feb 19 Python
python绘制中国大陆人口热力图
Nov 07 Python
jupyter notebook 中输出pyecharts图实例
Apr 23 Python
pandas取出重复数据的方法
Jul 04 Python
用Pelican搭建一个极简静态博客系统过程解析
Aug 22 Python
基于python2.7实现图形密码生成器的实例代码
Nov 05 Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
Apr 13 Python
Python访问Redis的详细操作
Jun 26 Python
Python集合set()使用的方法详解
Mar 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脚本数据库功能详解(上)
2006/10/09 PHP
PHP标准类(stdclass)用法示例
2016/09/28 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
Knockoutjs的环境搭建教程
2012/11/26 Javascript
javascript右下角弹层及自动隐藏(自己编写)
2013/11/20 Javascript
jquery操作select元素和option的实例代码
2016/02/03 Javascript
浅谈JS中json数据的处理
2016/06/30 Javascript
Bootstrap Table使用心得总结
2016/11/29 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
使用vue-resource进行数据交互的实例
2017/09/02 Javascript
nodeJS微信分享
2017/12/20 NodeJs
Puppeteer 爬取动态生成的网页实战
2018/11/14 Javascript
node实现socket链接与GPRS进行通信的方法
2019/05/20 Javascript
JavaScript判断浏览器运行环境的详细方法
2019/06/30 Javascript
解决vue+router路由跳转不起作用的一项原因
2020/07/19 Javascript
解决vue加scoped后就无法修改vant的UI组件的样式问题
2020/09/07 Javascript
浅谈Python程序与C++程序的联合使用
2015/04/07 Python
调试Python程序代码的几种方法总结
2015/04/28 Python
Python中字典和集合学习小结
2017/07/07 Python
树莓派与PC端在局域网内运用python实现即时通讯
2019/06/22 Python
关于pytorch多GPU训练实例与性能对比分析
2019/08/19 Python
互动出版网:专业书籍
2017/03/21 全球购物
中学教师师德承诺书
2014/05/23 职场文书
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
初中同学会活动方案
2014/08/22 职场文书
敬老月活动总结
2014/08/28 职场文书
党的群众路线教育实践活动剖析材料
2014/09/30 职场文书
暑假社会实践证明格式
2014/10/28 职场文书
难以忽视的真相观后感
2015/06/05 职场文书
维护民族团结心得体会2016
2016/01/15 职场文书
《火烧云》教学反思
2016/02/23 职场文书
Vue3中的Refs和Ref详情
2021/11/11 Vue.js
python 中的jieba分词库
2021/11/23 Python