利用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 相关文章推荐
以911新闻为例演示Python实现数据可视化的教程
Apr 23 Python
python妙用之编码的转换详解
Apr 21 Python
Python二叉树的定义及常用遍历算法分析
Nov 24 Python
基于Django框架利用Ajax实现点赞功能实例代码
Aug 19 Python
python 自动重连wifi windows的方法
Dec 18 Python
在python中利用opencv简单做图片比对的方法
Jan 24 Python
Django中ORM外键和表的关系详解
May 20 Python
python 使用plt画图,去除图片四周的白边方法
Jul 09 Python
使用python画社交网络图实例代码
Jul 10 Python
python3 反射的四种基本方法解析
Aug 26 Python
用Python 爬取猫眼电影数据分析《无名之辈》
Jul 24 Python
pycharm2020.2 配置使用的方法详解
Sep 16 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 函数语法介绍一
2009/06/14 PHP
flash用php连接数据库的代码
2011/04/21 PHP
yii实现创建验证码实例解析
2014/07/31 PHP
PHP中常用的输出函数总结
2014/09/22 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
2016/11/30 PHP
网页图片延时加载的js代码
2010/04/22 Javascript
jQuery操作input type=radio的实现代码
2012/06/14 Javascript
jquery ajax 简单范例(界面+后台)
2013/11/19 Javascript
jQuery图片轮播滚动切换代码分享
2020/04/20 Javascript
Node.js编写组件的三种实现方式
2016/02/25 Javascript
vue2里面ref的具体使用方法
2017/10/27 Javascript
15分钟深入了解JS继承分类、原理与用法
2019/01/19 Javascript
JavaScript ES6 Class类实现原理详解
2020/05/08 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
[01:07:20]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第二场 2月2日
2021/03/11 DOTA
解析Python中的变量、引用、拷贝和作用域的问题
2015/04/07 Python
使用C++扩展Python的功能详解
2018/01/12 Python
python贪婪匹配以及多行匹配的实例讲解
2018/04/19 Python
pandas 透视表中文字段排序方法
2018/11/16 Python
Python 实现域名解析为ip的方法
2019/02/14 Python
set在python里的含义和用法
2019/06/24 Python
Python Matplotlib 基于networkx画关系网络图
2019/07/10 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
python使用协程实现并发操作的方法详解
2019/12/27 Python
Python OpenCV读取显示视频的方法示例
2020/02/20 Python
Django高并发负载均衡实现原理详解
2020/04/04 Python
Python openpyxl模块实现excel读写操作
2020/06/30 Python
软件配置管理有什么好处
2015/04/15 面试题
迎八一活动主题
2014/01/31 职场文书
关于运动会广播稿50字
2014/10/18 职场文书
求职简历自荐信怎么写
2015/03/26 职场文书
2015年高三年级组工作总结
2015/07/21 职场文书
2016年党员创先争优公开承诺书
2016/03/25 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python
MySQL时区造成时差问题
2022/04/13 MySQL