利用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中enumerate函数用法实例分析
May 20 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
Mar 24 Python
Python用户推荐系统曼哈顿算法实现完整代码
Dec 01 Python
Python网络编程使用select实现socket全双工异步通信功能示例
Apr 09 Python
caffe binaryproto 与 npy相互转换的实例讲解
Jul 09 Python
对python Tkinter Text的用法详解
Oct 11 Python
Python3 执行系统命令并获取实时回显功能
Jul 09 Python
ORM Django 终端打印 SQL 语句实现解析
Aug 09 Python
Python pip 安装与使用(安装、更新、删除)
Oct 06 Python
解决pycharm同一目录下无法import其他文件
Feb 12 Python
python 在sql语句中使用%s,%d,%f说明
Jun 06 Python
怎么用Python识别手势数字
Jun 07 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
不用数据库的多用户文件自由上传投票系统(1)
2006/10/09 PHP
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
PHP实现批量修改文件后缀名的方法
2015/07/30 PHP
用JavaScript获取网页中的js、css、Flash等文件
2006/12/20 Javascript
javascript中的location用法简单介绍
2007/03/07 Javascript
JQuery操作单选按钮以及复选按钮示例
2013/09/23 Javascript
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
Javasipt:操作radio标签详解
2013/12/30 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
基于JavaScript实现简单的随机抽奖小程序
2016/01/05 Javascript
深入剖析JavaScript:Object类型
2016/05/10 Javascript
input输入密码变黑点密文的实现方法
2017/01/09 Javascript
微信小程序 实战程序简易新闻的制作
2017/01/09 Javascript
jQuery对table表格进行增删改查
2020/12/22 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
Mac中安装nvm的教程分享
2017/12/11 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
微信小程序页面传多个参数跳转页面的实现方法
2019/05/17 Javascript
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
JS面向对象之多选框实现
2020/01/17 Javascript
Python读写Redis数据库操作示例
2014/03/18 Python
python 实现tar文件压缩解压的实例详解
2017/08/20 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
详解python实现可视化的MD5、sha256哈希加密小工具
2020/09/14 Python
提高python代码运行效率的一些建议
2020/09/29 Python
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
社区母亲节活动总结
2015/02/10 职场文书
起诉状范本
2015/05/20 职场文书
音乐课《小猫钓鱼》教学反思
2016/02/18 职场文书
自荐信范文
2019/05/20 职场文书
python urllib库的使用详解
2021/04/13 Python
Python异常类型以及处理方法汇总
2021/06/05 Python
JavaScript 与 TypeScript之间的联系
2021/11/27 Javascript
python机器学习实现oneR算法(以鸢尾data为例)
2022/03/03 Python