利用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备份文件的脚本
Aug 11 Python
利用Python获取操作系统信息实例
Sep 02 Python
Python实现的快速排序算法详解
Aug 01 Python
解决Django模板无法使用perms变量问题的方法
Sep 10 Python
python向已存在的excel中新增表,不覆盖原数据的实例
May 02 Python
windows下python 3.6.4安装配置图文教程
Aug 21 Python
python 监听salt job状态,并任务数据推送到redis中的方法
Jan 14 Python
详解python3 + Scrapy爬虫学习之创建项目
Apr 12 Python
详解Python odoo中嵌入html简单的分页功能
May 29 Python
python 画3维轨迹图并进行比较的实例
Dec 06 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
Sep 17 Python
python实现单机五子棋
Aug 28 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实例分享之mysql数据备份
2014/05/19 PHP
php读取txt文件并将数据插入到数据库
2016/02/23 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
THINKPHP3.2使用soap连接webservice的解决方法
2017/12/13 PHP
Laravel使用Queue队列的技巧汇总
2019/09/02 PHP
js 对象是否存在判断
2009/07/15 Javascript
IE中createElement需要注意的一个问题
2010/07/13 Javascript
用JS实现一个TreeMenu效果分享
2011/08/28 Javascript
Knockoutjs的环境搭建教程
2012/11/26 Javascript
用jquery方法操作radio使其默认选项是否
2013/09/10 Javascript
使用js判断当前时区TimeZone是否是夏令时
2014/02/23 Javascript
jquery easyui使用心得
2014/07/07 Javascript
基于jQuery创建鼠标悬停效果的方法
2015/03/07 Javascript
JavaScript实现的MD5算法完整实例
2016/02/02 Javascript
JS实现AES加密并与PHP互通的方法分析
2017/04/19 Javascript
vue.js评论发布信息可插入QQ表情功能
2017/08/08 Javascript
vue 实现全选全不选的示例代码
2018/03/29 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
JS实现倒计时图文效果
2018/11/17 Javascript
如何在 ant 的table中实现图片的渲染操作
2020/10/28 Javascript
Python实现快速计算词频功能示例
2018/06/25 Python
python3.6的venv模块使用详解
2018/08/01 Python
在django中实现页面倒数几秒后自动跳转的例子
2019/08/16 Python
Python英文文章词频统计(14份剑桥真题词频统计)
2019/10/13 Python
python中xlutils库用法浅析
2020/12/29 Python
HTML5 直播疯狂点赞动画实现代码 附源码
2020/04/14 HTML / CSS
Crocs美国官方网站:卡骆驰洞洞鞋
2017/08/04 全球购物
Farah官方网站:男士服装及配件
2019/11/01 全球购物
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
测试时代收集的软件测试面试题
2013/09/25 面试题
市优秀教师事迹材料
2014/02/05 职场文书
优秀士兵先进事迹
2014/02/06 职场文书
财务管理专业毕业生求职信
2014/06/02 职场文书
会计继续教育培训心得体会
2016/01/19 职场文书
初一英语教学反思
2016/02/15 职场文书
MySQL 分区表中分区键为什么必须是主键的一部分
2022/03/17 MySQL