利用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显示生日是星期几的方法
May 27 Python
python编写Logistic逻辑回归
Dec 30 Python
python3实现跳一跳点击跳跃
Jan 08 Python
详解django.contirb.auth-认证
Jul 16 Python
Python字符串逆序输出的实例讲解
Feb 16 Python
python实现祝福弹窗效果
Apr 07 Python
Python udp网络程序实现发送、接收数据功能示例
Dec 09 Python
通过Python实现一个简单的html页面
May 16 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 28 Python
calendar在python3时间中常用函数举例详解
Nov 18 Python
python语言time库和datetime库基本使用详解
Dec 25 Python
Python如何用re模块实现简易tokenizer
May 02 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
ThinkPHP内置jsonRPC的缺陷分析
2014/12/18 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
2015/02/02 PHP
php实现批量修改文件名称的方法
2016/07/23 PHP
PHP后台微信支付和支付宝支付开发
2017/04/28 PHP
php 中的closure用法详解
2017/06/12 PHP
PHP操作Redis常用技巧总结
2018/04/24 PHP
Highslide.js是一款基于js实现的网页中图片展示插件
2020/03/30 Javascript
jquery 获取json数据实现代码
2009/04/27 Javascript
javascript Array.prototype.slice使用说明
2010/10/11 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
JavaScript获得指定对象大小的方法
2015/07/01 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
2015/09/30 Javascript
jQuery中使用animate自定义动画的方法
2016/05/29 Javascript
javascript简易画板开发
2020/04/12 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
微信小程序实现左右联动的实战记录
2018/07/05 Javascript
jQuery利用FormData上传文件实现批量上传
2018/12/04 jQuery
Auto.JS实现抖音刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频功能
2020/05/08 Javascript
Vue如何实现验证码输入交互
2020/12/07 Vue.js
[00:03]DOTA2新版本PA至宝展示
2014/11/19 DOTA
Python3通过Luhn算法快速验证信用卡卡号的方法
2015/05/14 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
Python实现平行坐标图的两种方法小结
2019/07/04 Python
Python中的list与tuple集合区别解析
2019/10/12 Python
python如何输出反斜杠
2020/06/18 Python
python 用opencv实现图像修复和图像金字塔
2020/11/27 Python
四年的个人工作自我评价
2013/12/10 职场文书
淘宝网店营销策划书
2014/01/11 职场文书
黄河象教学反思
2014/02/10 职场文书
中考标语大全
2014/06/05 职场文书
跳蚤市场口号
2014/06/13 职场文书
篮球兴趣小组活动总结
2014/07/07 职场文书
金融保险专业求职信
2014/09/03 职场文书
大学生联谊活动策划书(光棍节)
2014/10/10 职场文书